JQuery不是动态添加类的选择器

时间:2014-01-16 10:00:17

标签: javascript jquery

我想在类似按钮上添加点击事件。单击时,我想添加一个名为active的类。当元素具有此类时,我不希望触发click事件。

为什么这个日志“被点击了!”每一次而不仅仅是第一次?

http://jsfiddle.net/M5MRQ/

<div class="vote">
    <a class="vUp">Like me</a>
</div>

$(".rate .vUp").not(".active").click(function(){
    console.log("click!");
    $(this).addClass("active");
    return false;
});

4 个答案:

答案 0 :(得分:1)

您可以使用.off()

简单地取消绑定事件
$(".rate .vUp").click(function(){
    console.log("click!");
    $(this).addClass("active");

    //Unbind event
    $(this).off("click");
    return false;
});

DEMO

答案 1 :(得分:1)

那是因为,你的DOM在运行时会发生变化,但你的JS却没有。你需要一个实时方法,或者更好,删除按钮上的点击处理程序,如下所示:

$(".rate .vUp").click(function(event){
    console.log("click!");
    $(this).addClass("active");
    $(event.currentTarget).unbind("click");
    event.preventDefault();
    return false;
});

http://jsfiddle.net/M5MRQ/7/

答案 2 :(得分:1)

尝试使用以下代码:

$(".rate .vUp").click(function(){
    if($(this).hasClass("active")){
        return false;
    }else{
        console.log("click!");
        $(this).addClass("active");
    }             
});

答案 3 :(得分:0)

您也可以使用hasClass()方法获取一个工作示例:

$(".rate .vUp").click(function(){
    if (!$(this).hasClass("active")) {        
        console.log("click!");
        $(this).addClass("active");
        event.preventDefault();
        return false;
    }
});

请参阅http://jsfiddle.net/M5MRQ/9/