javascript - Jquery条件下拉菜单切换

标签 javascript jquery html conditional-statements

我很痛苦。 :)

我正在创建一个卡路里计算器,其中包含针对某些饮食偏好的下拉菜单。我已将其设置为当用户单击按钮时,会出现下拉菜单。当用户单击按钮外部时,该按钮就会消失。

我想要两件事,但我似乎无法实现。

  1. 再次单击按钮会使“show”类从“#myDropdown”中消失

  2. 当下拉菜单为“显示”时,我想将“fa-plus-down”关联到按钮旁边,当它“关闭”时,我希望在其旁边关联“fa-plus-up”图标。

// 1.问题最大,看不出逻辑在哪里。任何意见都会受到赞赏。 //

<div id="contenttable">
            <div class="maindish">
                <div class="dropdown">
                    <button onclick="selectDiet()" class="dropbtn main">Diet or Allergen Filter <i class="fa fa-sort-down" style=""></i></button>
                    <div id="myDropdown" class="dropdown-content">
                        <a id="veganDiet" class="dropbtn"><img src="http://www.padthai.decorolux.com/wp-content/uploads/2017/11/vegan2-1.png"  style="width:40px; display:inline; height:20px; vertical-align:middle;"> Vegan</a>
                        <a id="vegetarianDietButton" class="dropbtn"><img src="http://www.padthai.decorolux.com/wp-content/uploads/2017/11/vegetarian-1.png" style="width:40px; height:20px; display:inline; vertical-align:middle;"> Vegetarian</a>
                        <a id="noAddesSugarButton" class="dropbtn"><img src="http://www.padthai.decorolux.com/wp-content/uploads/2017/11/sugarfree-1.png" style="width:40px; height:20px; display:inline; vertical-align:middle;"> No Added Sugar</a>
                    </div>
                </div>

还有 JS

function selectDiet() {
    document.getElementById("myDropdown").classList.add("show");
}

// Close the dropdown if the user clicks outside of it

window.onclick = function(event) {
    if (!event.target.matches(".dropbtn")) {
        var dropdowns = document.getElementsByClassName("dropdown-content");

        var i;
        for (i = 0; i < dropdowns.length; i++) {
            var openDropdown = dropdowns[i];
            if (openDropdown.classList.contains("show")) {
                openDropdown.classList.remove("show");



            }
        }
    }
};

// Close the dropdown if the user clicks on it again

if ($(".dropdown").hasClass('show')) {
    $("button.dropbtn.main").click(function() {
        $("#myDropdown").removeClass("show");
      })};








    // Dropdown menu animation

    $("button.dropbtn.main").click(function() {
        $(this).children().toggleClass('fa-sort-down');
        // $(this).children().removeClass('fa-times-circle');
        $(this).children().toggleClass('fa-sort-up');







    });

提前致谢,可以在 codepen 上查看.

最佳答案

由于您使用的是 jQuery,所以我为您编写了其中的函数。

第一个函数在点击.dropbtn时打开和关闭下拉菜单,使用slideToggle()作为下拉菜单,并使用toggleClass()图标(请注意,它切换两个类)。

$('.dropbtn').on('click', function() {
  $('#myDropdown').slideToggle();
  $(this).find('i').toggleClass('fa-sort-up fa-sort-down')
});

然后,当我们在这些元素外部单击时,您希望关闭下拉列表。 因此我写了这个函数。它使用 slideUp 关闭下拉列表,并删除和添加图标的类。

$(document).mouseup(function(e) {
  var container = $("#myDropdown, .dropbtn");
  if (!container.is(e.target) 
        && container.has(e.target).length === 0
        && $("#myDropdown").is(':visible') ) {
    $("#myDropdown").slideUp();
    $('.dropbtn i').addClass('fa-sort-up').removeClass('fa-sort-down')
  }
});

Updated CODEPEN

关于javascript - Jquery条件下拉菜单切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49153157/

相关文章:

javascript - Sequelize 年龄验证(从出生日期开始)

javascript - 如何通过单击第一个 div 值在第二个 div 中显示一个 div 值

javascript - 在 jquery 上做这件事的最短方法是什么?

javascript - 模拟 jquery 选择器并返回一个 html 元素

php - 从 html 中删除图像,就像 gmail 对未启用图像的电子邮件所做的一样

javascript - 通过ajax方法GET将google标签管理器结果发送到php页面

javascript - 需要遍历 firebase 数据

php - 将常规 Javascript 转换为 jQuery

php - DOM Scrape 不工作 PHP

html - 子菜单不显示