2014-03-28 88 views
0

我有一组三个元素。当用户点击某个元素时,通过ajax加载页面之后还有许多即将到来的元素。我遍历每个初始元素和事件附加到他们这样的:jQuery事件委托和附件问题

tagSet.each(function(index, element){ 

    tagSet.eq(index).on("click",function(){alert("Alerted! Clicked")}); 
} 

但是,这种方法的AJAX创建的元素不会与一个事件进行安装。因此,我必须做出改变的一点点对(),它容纳了ajax创建的元素:

tagSet.each(function(index, element){ 

    $(document).on("click",tagSet.eq(index),function(){alert("Alerted! Clicked")}); 
} 

它解决事件附件的问题,这些AJAX创建的元素,但引出了另外一个问题。它以一种方式附加事件,使得页面的所有元素一次触发该特定事件。我的意思是,因为我有三个元素,点击其中一个会导致触发全部三个alert("Alerted!Clicke!)。什么是问题和解决方案?

+0

您需要将选择器作为第二参数传递给'.on'。 –

+0

告诉我们tagSet是什么,我们将告诉你如何避免这个愚蠢的循环 – adeneo

+0

tagSet是一个匹配集合,三个''标签 –

回答

1

使用事件委托绑定到与查询匹配的所有当前和未来的项目:

$(document).on("click", ".some-class-here", function(){ 
    alert("Alerted! Clicked") 
}); 

替换.some-class-here与匹配您的tagSet元素选择。然后删除您的电话$.each

+0

您会解释更多关于'$ .each'的信息 –

+0

使用'each'将'tagSet'中的每个项目的事件处理程序绑定到'document'元素一次。这违背了使用事件委托的目的之一(单个事件的事件处理程序更少)。 –

+0

你回答的是伎俩......非常感谢...... –