1

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

这里的问题是在我单击.likes.1div 然后单击.likes.2div 然后.likes.1它再次向我显示.article-infodiv 之后。

因此,即使属性 surname 删除它仍然执行它的任务。

为什么呢 ?

$(document).ready(function() {

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

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

1 回答 1

2

click 事件的绑定发生在页面加载时,或者更准确地说是在 DOM 就绪时发生。

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

这会将事件绑定到在页面加载时与该选择器匹配的任何和所有元素,稍后删除与该选择器相关的属性、类、ID 或任何其他内容不会改变这一点,因为该事件已被绑定。

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

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

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

或类似的东西:

$(".likes.1[surname|='first']").on('click', function() {
    generate('information');
    $(this).off('click');
    $(".article-info").show();
});
于 2013-02-10T18:29:32.680 回答