Zac*_*olf 23 javascript jquery triggers
我正在编写一个jQuery插件并使用.on和.trigger作为我的pub/sub系统.但是,我想在不同的场景中触发多个事件.
这可能是一个字符串,就像.on方法一样吗?
目标:
$this.trigger("success next etc"); // doesn't work
Run Code Online (Sandbox Code Playgroud)
当前解决方案
$this
.trigger("success")
.trigger("next")
.trigger("etc"); // works, triggers all three events
Run Code Online (Sandbox Code Playgroud)
有什么建议?
haz*_*zik 33
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);
Run Code Online (Sandbox Code Playgroud)
并称之为:
$this.triggerAll("success next etc");
Run Code Online (Sandbox Code Playgroud)
你有什么是好的...你不能使用逗号分隔列表触发多个事件.trigger()构造函数只接受事件名称和可选的附加参数以传递给事件处理程序.
替代方法是触发附加到元素的所有事件,但是,如果您需要在不同的情境中触发特定事件,则可能无法满足您的需求:
$.each($this.data('events'), function(k, v) {
$this.trigger(k);
});?
Run Code Online (Sandbox Code Playgroud)
以防万一其他人在以后的生活中偶然发现这个问题,我通过创建一个自定义的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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23959 次 |
| 最近记录: |