如果我点击数字div,我应该收到警报。如果我单击clicker,则会将一个less类添加到数字div中,之后在数字div上的任何单击都不应显示警报,因为它现在具有较少的类。相反,我仍然得到警报,好像较少的班级不在那里。我究竟做错了什么?
<div id="clicker">Clicker</div>
<div class="numbers">123456789</div>
$('.numbers').not('.less').on('click',function(){
alert('should not alert if has class less after clicker');
});
$('#clicker').on('click',function(){
$('.numbers').addClass('less');
});
感谢帮助人员,我最终得到了这个:
$('body').on('click', '.numbers:not(".less")', function(){
alert('should not alert if has class less after clicker');
});
答案 0 :(得分:5)
您正在绑定,然后添加该类。您需要绑定事件,或将事件委托给一致的父级。
答案 1 :(得分:5)
尝试委派活动
$('body').on('click','.numbers' ,function(e){
if( $(e.target).hasClass('less'){
// Do nothing
}
else{
alert('should not alert if has class less after clicker');
}
});
<强> Check Fiddle 强>
事件被添加到元素而不是类,所以当您添加条件以不根据类条件触发事件时,它不会工作..
您需要为此类案件委派事件。
答案 2 :(得分:1)
$(“numbers”)通过测试一次并绑定到click事件。它完成了 - 绑定是固定的。