2013-02-10 23 views
1

这是一段简单的代码,所以我不会解释它做了什么。这里删除属性按钮仍然是jQuery中的perfoming动作

问题是我点击后.likes.1格,然后单击.likes.2格,然后重新.likes.1它结束了我展示.article-info股利。

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

这是为什么?

$(document).ready(function() { 

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

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

回答

2

点击事件的绑定发生在页面加载时,或者更准确地说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(); 
}); 
+0

+1,但使用这样的复杂的代表团选择直接绑定到该文件可能会降低页面的性能。 – 2013-02-10 18:32:40

+0

@FabrícioMatté - 你是对的,至少添加了一条评论,用最接近的父代替代文档,使事件处理程序“更窄”。 – adeneo 2013-02-10 18:34:28

+0

我明白了,您的更新答案始终详细。 – 2013-02-10 18:36:22