删除属性按钮后仍然在jQuery中执行动作

时间:2013-02-10 18:16:11

标签: jquery

这是一段简单的代码,所以我不会解释它的作用。

此处的问题是在我点击.likes.1 div然后再点击.likes.2 div然后再次点击.likes.1后,它最终显示.article-info div。

所以即使属性姓氏删除它仍然执行它的任务。

为什么会这样?

$(document).ready(function() {

    $(".likes.1[surname|='first']").click(function() {
        generate('information');
        $(this).removeAttr('surname');
        $(".article-info").show();
    });

    $(".likes.2").click(function() {
        $(".article-info").hide();
    });

1 个答案:

答案 0 :(得分:2)

点击事件的绑定发生在页面加载上,或者更准确地发生在DOM就绪上。

$(".likes.1[surname|='first']").click(function() { ... })

这会将事件绑定到与pageload上的该选择器匹配的任何和所有元素,删除属性,类,ID或稍后与该选择器相关的任何其他内容都不会更改,因为事件已经绑定。

您需要取消绑定事件或使用委托事件处理程序,因为委派的处理程序将在每次单击时检查选择器:

$(document).on("click", ".likes.1[surname|='first']", function() { ... })

您应该使用最接近目标元素的可用父元素而不是文档(并且仅包含数字的类通常不是一个好主意。)

或类似的东西:

$(".likes.1[surname|='first']").on('click', function() {
    generate('information');
    $(this).off('click');
    $(".article-info").show();
});