jQuery .trigger()多个事件

我正在编写一个jQuery插件,并使用.on.trigger作为我的pub / sub系统。 但是,我想在不同的场景中触发多个事件。

这可以作为一个字符串,如.on方法吗?

目标:

 $this.trigger("success next etc"); // doesn't work 

当前解决方案

 $this .trigger("success") .trigger("next") .trigger("etc"); // works, triggers all three events 

有什么建议?

JQuery本身不支持触发多个事件,但是您可以编写自定义扩展方法triggerAll

 (function($) { $.fn.extend({ triggerAll: function (events, params) { var el = this, i, evts = events.split(' '); for (i = 0; i < evts.length; i += 1) { el.trigger(evts[i], params); } return el; } }); })(jQuery); 

并称之为:

 $this.triggerAll("success next etc"); 

你有什么是好的…你不能使用逗号分隔列表触发多个事件。 trigger()构造函数只接受事件名称和可选的附加参数以传递给事件处理程序。

替代方法是触发附加到元素的所有事件,但是,如果您需要在不同的情境中触发特定事件,则可能无法满足您的需求:

 $.each($this.data('events'), function(k, v) { $this.trigger(k); });​ 

以防万一其他人在以后的生活中偶然发现这个问题,我通过创建一个自定义的jQuery函数来解决这个问题。

 $.fn.triggerMultiple = function(list){ return this.each(function(){ var $this = $(this); // cache target $.each(list.split(" "), function(k, v){ // split string and loop through params $this.trigger(v); // trigger each passed param }); }); }; $this.triggerMultiple("success next etc"); // triggers each event 

因为,我没有评论的特权,所以我想指出$this.data('events') doesn't work ,必须使用内部使用函数。 $._data($this[0], 'events')