当我向元素动态添加类时,伪过滤无法识别该类。当我使用 on() 函数时会出现此问题,但是当我使用 live() 时一切都很好
一开始,所有列表项都是可点击的。但是在您按下按钮后,“Ipsum”不应再被点击,并且不应出现另一个“未激活”消息。
$('.item:not(.active)').on('click', function(){
$('<p>Not active</p>').appendTo('body');
});
当我向元素动态添加类时,伪过滤无法识别该类。当我使用 on() 函数时会出现此问题,但是当我使用 live() 时一切都很好
一开始,所有列表项都是可点击的。但是在您按下按钮后,“Ipsum”不应再被点击,并且不应出现另一个“未激活”消息。
$('.item:not(.active)').on('click', function(){
$('<p>Not active</p>').appendTo('body');
});
$('body').on('click', '.item:not(.active)', function(){
$('<p>Not active</p>').appendTo('body');
});
采用$(document).on
$(document).on('click','.item:not(.active)', function(){
$('<p>Not active</p>').appendTo('body');
});
这是正确的行为。您正在向非活动元素(所有 3 个 .item)添加事件。因此,如果您添加类,它不会取消绑定事件。
我会做这样的事情:
$('input[type=button]').click(function(){
$('.item:nth-child(2)').addClass('active').css('color','#F00');
});
$('.item').on('click', function() {
if($(this).is('.active')) return;
$('<p>Not active</p>').appendTo('body');
});
$(document).on('click','.item:not(.active)', function(){
$('<p>Not active</p>').appendTo('body');
});