jquery – not selector,on()单击事件

前端之家收集整理的这篇文章主要介绍了jquery – not selector,on()单击事件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在执行以下代码时遇到一些问题:
var i = 1;  
$('.hello:not(.selected)').on('click',function(){
    $(this).addClass('selected');       
    console.log(i++);   
});

问题是这个代码应该在选择的类添加一次之后触发,但是它正在执行很多次,我只是希望我的变量不增加.换句话说,我试图做以下(这是有效的,但我不想使用活动的功能,因为它已被弃用):

$('.hello:not(.selected)').live('click',function () { 
   $('.hello').removeClass('selected');
   $(this).addClass('selected');
... 
});

非常感谢您的回复,
ķ

解决方法

您的代码正在使用当前满足此条件的元素集:
$('.hello:not(.selected)')

并为所有永恒设置此事件处理程序:

.on('click',function(){
    $(this).addClass('selected');
    $(this).css({opacity : 0.5});       
    console.log(i++);   
});

特别重要的是,一旦处理程序设置在元素上,它将继续处于活动状态,即使稍后该元素不再满足条件(在这种情况下,通过获取所选类).

有几种方法来实现所需的行为.一个是动态地检查“过滤器”条件是否仍然保存在事件处理程序内:

$('.hello').on('click',function(){
    if($(this).hasClass('selected')) {
        return;
    }
    $(this).addClass('selected');
    $(this).css({opacity : 0.5});       
    console.log(i++);   
});

另一个是委托事件 – 在这种情况下,父元素将在其后代的一个通知事件,并且将在决定触发事件处理程序(代码无耻粘贴)之前动态地检查所述后代是否满足过滤条件从本李的答案):

$('body').on('click','.hello:not(.selected)',function() {
    $(this).addClass('selected');
    $(this).css({opacity : 0.5});       
    console.log(i++);
});
原文链接:https://www.f2er.com/jquery/176686.html

猜你在找的jQuery相关文章