首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery .trigger()多个事件

jQuery .trigger()多个事件
EN

Stack Overflow用户
提问于 2012-08-08 00:54:15
回答 4查看 29.3K关注 0票数 25

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

这是否可以像.on方法那样作为一个字符串来执行?

目标:

代码语言:javascript
复制
$this.trigger("success next etc");    // doesn't work

当前解决方案:

代码语言:javascript
复制
$this
    .trigger("success")
    .trigger("next")
    .trigger("etc");                  // works, triggers all three events

有什么建议吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-08 01:18:21

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

代码语言:javascript
复制
(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);

并将其命名为:

代码语言:javascript
复制
$this.triggerAll("success next etc");
票数 34
EN

Stack Overflow用户

发布于 2012-08-08 01:04:16

你所拥有的一切都很好。不能使用逗号分隔的列表触发多个事件。trigger()构造函数只接受一个事件名称和可选的附加参数来传递给事件处理程序。

另一种方法是触发附加到一个元素的所有事件,但是,如果您需要在不同的数据源中触发特定事件,则这可能无法满足您的需求:

代码语言:javascript
复制
$.each($this.data('events'), function(k, v) {
    $this.trigger(k);
});​
票数 6
EN

Stack Overflow用户

发布于 2012-08-08 01:15:40

为了防止其他人在以后的生活中遇到这个问题,我通过创建一个自定义的jQuery函数解决了这个问题。

代码语言:javascript
复制
$.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
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11850625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档