jQuery无法识别:not(.className)过滤

时间:2013-03-22 06:30:41

标签: jquery jquery-on

当我动态地向一个元素添加一个类时,伪过滤不会识别该类。 当我使用on()函数时会出现此问题,但是当我使用live()

时一切都很好

http://jsfiddle.net/AHyyq/1/

一开始,所有列表项都是可点击的。 但是按下按钮后,“Ipsum”不应再被点击,并且不应出现另一个“Not active”消息。

$('.item:not(.active)').on('click', function(){
   $('<p>Not active</p>').appendTo('body');
});

4 个答案:

答案 0 :(得分:3)

$('body').on('click', '.item:not(.active)', function(){
    $('<p>Not active</p>').appendTo('body');
});

答案 1 :(得分:1)

使用$(document).on

$(document).on('click','.item:not(.active)', function(){
   $('<p>Not active</p>').appendTo('body');
});

DEMO

答案 2 :(得分:0)

这是正确的行为。您正在向非活动元素添加事件(所有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');
});

http://jsfiddle.net/AHyyq/9/

答案 3 :(得分:-1)

See here

 $(document).on('click','.item:not(.active)', function(){
   $('<p>Not active</p>').appendTo('body');
});