为什么这不起作用?我想如果在打开时向触发器添加类名,然后如果单击现在具有此类名的触发器......我们可以关闭它。
// Menu trigger
$('.menu-trigger').on('click', function(e) {
e.preventDefault();
$('.menu-container').fadeIn('fast');
$(this).addClass('open');
});
$('.menu-trigger.open').on('click', function(e) {
e.preventDefault();
$('.menu-container').fadeOut('fast');
$(this).removeClass('open');
});
答案 0 :(得分:0)
活动委派:
委托事件的优势在于它们可以处理来自稍后添加到文档的后代元素的事件。通过选择附加委托事件处理程序时保证存在的元素,您可以使用委派事件来避免频繁附加和删除事件处理程序。
$('parentselector').on('click','childselector',//callbackfunction()
这里,document只是作为菜单类的父类。它用于指定.menu-trigger
,.menu-trigger.open
是文档中的单个元素,而on('click'
用于动态创造了元素。
$(document).on('click','.menu-trigger' function(e) {
e.preventDefault();
$('.menu-container').fadeIn('fast');
$(this).addClass('open');
});
$(document).on('click','.menu-trigger.open' ,function(e) {
e.preventDefault();
$('.menu-container').fadeOut('fast');
$(this).removeClass('open');
});
答案 1 :(得分:0)
将事件 delegation 用于动态添加元素
$(document).on('click',".menu-trigger.open", function(e) {
e.preventDefault();
$('.menu-container').fadeOut('fast');
$(this).removeClass('open');
});
事件委托允许我们将单个事件监听器附加到 父元素,将为匹配a的所有后代触发 选择器,无论这些后代现在存在还是被添加到 将来
答案 2 :(得分:0)
你的代码不起作用的原因是你有两个独立的处理程序,如果元素有.open类,它们都将触发,因为处理程序中的两个选择器都适用。所以,你可以做几件事:
如果您只想在fadeIn和fadeOut之间切换,请使用fadeToggle方法:
$('.menu-trigger').on('click', function(e) {
e.preventDefault();
$('.menu-container').fadeToggle('fast');
});