【问题标题】:Opening and closing Bootstrap dropdown without clicking via JS function无需通过 JS 功能点击即可打开和关闭 Bootstrap 下拉菜单
【发布时间】:2019-12-08 16:43:56
【问题描述】:

我的网站迷你购物车有一个 Bootstrap 下拉菜单,如下面的 sn-p。我对其进行了设置,以便当它下降时,它后面会有一个灯箱效果,使其余内容变灰。

$(".dropdown").on('show.bs.dropdown hide.bs.dropdown', function(e) {
  var lightbox = document.getElementById("lightbox_container");
  if(e.type == 'hide'){
    lightbox.style.display = "none";
  }else if(e.type == 'show'){
    lightbox.style.display = "block";
  }
});
#lightbox_container{
  position:fixed;
  width:100%;
  height:100%;
  background-color:rgba(0,0,0,0.5);
  z-index:40;
  display:none;
  top:0px;
  left:0px;
}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>

<div class="dropdown d-inline minicart">
  <span class="dropdown-toggle" data-toggle="dropdown">
    <img src="media/icons/cart.png" alt="cart icon" class="icon">
  </span>
  <ul class="dropdown-menu" id="minicart">
    <li class="dropdown-submenu">
    // stuff goes here
    </li>
  </ul>
</div>

<div id="lightbox_container"></div>

这按预期工作并且工作正常,但我想在添加某些内容时弹出迷你车。

我是 Bootstrap 的新手,所以不太确定如何实现这一点。我这样做了:

function show_cart(){
    $(".minicart").addClass("show");
    $(".minicart .dropdown-toggle").attr("aria-expanded", "true");
    $(".minicart .dropdown-menu").addClass("show");
    $(".minicart .dropdown-menu").css("position", "absolute");
    $(".minicart .dropdown-menu").css("transform", "translate3d(-171px, 21px, 0px)");
    $(".minicart .dropdown-menu").css("top", "0px");
    $(".minicart .dropdown-menu").css("left", "0px");
    $(".minicart .dropdown-menu").css("will-change", "transform");
    $("#lightbox_container").css("display", "block");
}

但显然这不是很好,即使它有点工作,但是当它打开时我无法在下拉列表之外单击以关闭它,我实际上必须上去并单击图标。

编辑

我改成:

function show_cart(){
    $(".minicart").addClass("show");
    $(".minicart .dropdown-toggle").attr("aria-expanded", "true");
    $(".minicart .dropdown-menu").addClass("show");;
    var doc_width = $(document).outerWidth(true);
    if (doc_width <= 768){
        $(".minicart .dropdown-menu").css("left", "-250px");
    }else{
        $(".minicart .dropdown-menu").css("left", "-350px");
    }
    $("#lightbox_container").css("display", "block");
}

然后为了再次隐藏它,我在实际的灯箱中添加了一个点击事件:

$("#lightbox_container").on("click", function(){
    if($("#navbarSupportedContent").hasClass("show")){
        $("#navbarSupportedContent").hide();
    }
    if($(".dropdown.locale").hasClass("show")){
        $(".dropdown.locale").hide();
    }
    if($(".dropdown.minicart").hasClass("show")){
        $(".dropdown.minicart").hide();
    }
    var lightbox = document.getElementById("lightbox_container");
    lightbox.style.display = "none";
    $(".minicart .dropdown-toggle").attr("aria-expanded", "flase");
    $(".minicart .dropdown-menu").removeClass("show");
});

【问题讨论】:

    标签: javascript jquery html css bootstrap-4


    【解决方案1】:

    您可以直接在菜单上切换可见性,如下所示:

    $('.dropdown .dropdown-menu').toggle();
    

    或者像这样:

    $('.dropdown .dropdown-menu').show();
    

    如果你愿意,你也可以模拟点击切换按钮:

    $('.dropdown-toggle').click();
    

    【讨论】:

    • 您好,感谢您的回答,toggle 或 show 都会显示下拉菜单,但它的样式会不正确并且没有灯箱,我无法单击它以再次关闭它。然后,当我单击图标好像要关闭它时,它就像第一次再次切换并正确显示灯箱效果,再次单击将隐藏灯箱并将下拉菜单保留在屏幕上
    猜你喜欢
    • 1970-01-01
    • 2013-11-13
    • 2014-12-12
    • 2012-05-15
    • 1970-01-01
    • 2023-03-10
    • 2017-12-01
    • 1970-01-01
    • 2022-10-25
    相关资源
    最近更新 更多