Jquery 有条件的下拉菜单切换
Jquery conditional dropdown menu toggling
我很痛苦。 :)
我正在创建一个卡路里计算器,其中包含特定饮食偏好的下拉菜单。我将其设置为当用户单击按钮时,会出现下拉菜单。当用户在按钮外单击时,它就会消失。
我想要两个我似乎无法实现的东西。
再次单击该按钮会使 class "show" 从“#myDropdown”中消失
当下拉菜单是"show"时我想关联按钮旁边的'fa-plus-down',当它是'closed'时我想要'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')
}
});
我很痛苦。 :)
我正在创建一个卡路里计算器,其中包含特定饮食偏好的下拉菜单。我将其设置为当用户单击按钮时,会出现下拉菜单。当用户在按钮外单击时,它就会消失。
我想要两个我似乎无法实现的东西。
再次单击该按钮会使 class "show" 从“#myDropdown”中消失
当下拉菜单是"show"时我想关联按钮旁边的'fa-plus-down',当它是'closed'时我想要'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')
}
});