Jquery条件下拉菜单切换

时间:2018-03-07 13:29:24

标签: javascript jquery html conditional

我痛苦不堪。 :)

我正在创建一个卡路里计算器,它具有针对某些饮食偏好的下拉菜单。我进行了设置,以便当用户点击按钮时,会显示下拉列表。当用户点击按钮外部时,它会消失。

我想要两件我似乎无法实现的事情。

  1. 再次点击该按钮会使课程显示"显示"消失在" #myDropdown"

  2. 当下拉列表显示"显示"我想关联' fa-plus-down'按钮旁边,当它关闭时#39;我想要' fa-plus-up'旁边的图标。

  3. // 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可以查看此处。

1 个答案:

答案 0 :(得分:1)

由于你使用的是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