2011-07-28 26 views
12

我有一个自定义事件,我想在某些时候触发,但与选择无关。在所有听众上触发jQuery事件

即 - 我想做些事情,将表现为运行

$("*").trigger('customEvent'); 

但jQuery的文档警告说,使用通用选择是很慢的。 有没有办法触发绑定到特定事件的所有对象,而无需使用通用选择器$("*")

谢谢!

P.S - 我正在使用一个特定的class,称为custom_event_listener并使用$('.custom_event_listener').trigger('customEvent')来避免使用通用选择器。我想知道是否有办法避免使用class

+0

难道你不能让这个事件冒泡并在更高的层次上捕获它吗? – Andre

+0

所以,你想对所有元素做一些事情,但不是使用全选元素。还有另一种方法可以缩小选择范围,但如果没有关于你在做什么的更多信息,我们就不知道它是什么。 – Zirak

+0

@Andre我不确定这是什么意思。有点像jQuery中的新手。我会谷歌'泡沫jQuery事件',看看它是否有帮助。 – Ben

回答

15

您可以触发所有具有与之结合这样的处理程序的事件:

$.event.trigger('customEvent'); 

This loops through $.cache to find what actually has a handler, then fires on those elements ...而不仅仅是寻找元素和射击每一个事件。

+0

到目前为止最好的答案。如果我没有得到更进一步缩小的答案,我会将其标记为答案。 – Ben

+3

这是没有记录和不赞成使用的:https://github.com/jquery/jquery/blob/935eb19d87063ec30b717b3d45368d3c73cb591d/jquery-migrate.js#L481 –