Javascript 事件响应中的问题
我不明白为什么Javascript 事件响应中的问题,javascript,jquery,Javascript,Jquery,我不明白为什么Test即使类open被添加到它中,也会继续触发?有没有关于如何以正确的方式使其在添加开放类时停止启动的想法 <div class="changer">Test</div> $(".changer:not('open')").on("click",function(){ $(this).addClass("open"); alert("passed"); }) 测试 $(“.changer:not('open')”)
Test
即使类open
被添加到它中,也会继续触发?有没有关于如何以正确的方式使其在添加开放类时停止启动的想法
<div class="changer">Test</div>
$(".changer:not('open')").on("click",function(){
$(this).addClass("open");
alert("passed");
})
测试
$(“.changer:not('open')”)。在(“单击”,函数(){
$(此).addClass(“打开”);
警报(“通过”);
})
这是因为元素是在页面加载时获取的,并且事件处理程序是在此时附加的,因此以后更改类不会删除事件处理程序 解决方案是检查事件处理程序中的类
$(".changer").on("click", function(){
if ( ! $(this).hasClass('open') ) {
$(this).addClass("open");
alert("passed");
}
});
或者,要使事件处理程序只启动一次,如果它符合您的需要,您可以使用jQuery
one()
。您应该使用.off()
在您不需要它时关闭侦听器@user3135757-我的错,我读错了,您不应该因为不匹配类而使用委托处理程序,检查事件处理程序中的类谢谢现在它可以工作了!但何时使用委托处理程序,何时不使用?通常,在动态插入元素时使用委托处理程序,但它们对于动态添加的类(如本例中)也很有用,但在需要检查是否未添加类时则不可用。此外,按照Simon的建议,使用off
,如果您不需要,删除事件处理程序是个好主意,那么您甚至不需要类->$(this)。关闭('click')
,非常有用,谢谢