2013-07-01 38 views
1

我知道我可以给html元素或类分配一个事件处理程序,这样如果新元素动态加载,事件仍然会触发新增加的元素。例如:为一个数组的所有元素分配一个事件处理程序,而不用或为每个元素使用(jQuery)

$('#main').on('click','a.link_class', function() { 
    // ... 
}); 

我有元素应用插件函数,然后将它们包含在数组中。然后我需要为这个数组元素分配一个事件(特别是给他们,而不是他们共同拥有的类)。有没有办法做到这一点,避免使用for循环或每个()(以便最近添加到数组的新元素仍然与事件一起触发)?像上面的例子一样简单的方法? 喜欢的东西:

$('#main').on('plugin_event',array, function() { 
    // ... 
}); 

或...

$('#main').on('plugin_event',array[i], function() { 
    // ... 
}); 
+0

貌似http://stackoverflow.com/questions/8273202/jquery -add-an-event-handler-to-objects-in-an-an-array可能会回答你的问题。 – Palpatim

+0

你可以发布[SSCCE](http://sscce.org/)/简单[现场演示](http://jsfiddle.net/),展示你在做什么,并展示contsraints? –

+0

我刚刚意识到插件存在某种问题。这里是我要更新的小提琴,展示了我的意思。 http://jsfiddle.net/rD2A7/1/ – Alvaro

回答

0

最初创建,你可以添加,而不是一个独特的CSS类他们每个人的阵列。这将允许您使用jQuery选择器来返回所有元素并将其他行为同时绑定到它们。

如果您需要添加或从数组中删除元素,您可以添加或从元素中删除类。您可以将jQuery选择器的结果缓存到与您所使用的数组相似的性能。

2

您将不得不跟踪数组,并检查您的处理程序当前事件目标是否存在于该数组中。

您可以使用data()实现前:

$("#main").data("plugin-array", yourArray); 

然后,您可以实现后者与$.inArray()

$("#main").on("plugin_event", function(e) { 
    if ($.inArray(e.target, $(this).data("plugin-array")) >= 0) { 
     // Target element is present in the array, handle the event... 
    } 
}); 
+0

这会将事件绑定到DOM中的每个对象,不是吗?似乎过度杀伤。我很好奇数据变量与使用CSS类的性能差异。我认为你可以在数据属性上创建一个[jQuery选择器](http://api.jquery.com/attribute-equals-selector/)以获得类似的效果。 – Corion

+1

@Corion,err,不,只有一个绑定到'#main'的处理程序。你在哪里看到其他的? –

+0

对不起,误解我的部分。 – Corion

相关问题