代码之家  ›  专栏  ›  技术社区  ›  DEfusion

来自多个侦听器插件的jquery调度事件

  •  3
  • DEfusion  · 技术社区  · 15 年前

    我正在寻找一种方法从我的jquery插件中分派一个事件,以便它可以有多个侦听器来处理该事件。我有插件设置,这样它会返回对自身的引用,这样我以后可以通过公共方法添加侦听器。

    到目前为止,我看到的唯一一个示例只有一个事件处理程序,例如:

    $.fn.foo = function( options ) {
        ...
        // trigger event
        options.eventHandler();
    }
    
    $('#bar').foo({ eventHandler: myEventHandler })
    

    这是我要做的唯一选择,只是拥有一个注册的事件处理程序数组并调用它们中的每一个,还是我缺少更好的选择。

    2 回复  |  直到 15 年前
        1
  •  2
  •   cllpse    15 年前

    我将继续向构造函数/选项对象中抛出数组。通常是这样做的:

    $("").plugIn(
    {
        prop: "value",
        foo: "bar",
        eventsToFire: [
            function () { },
            function () { },
            function () { }
        ]
    });
    

    这个插件可以做一些事情:

    假设您正在编写一个应该在集合上执行的插件。

    jQuery.fn.plugIn = function (options)
    {
        return this.each(function ()
        {
            var i = options.eventsToFire.length;
    
            while (i--) options.eventsToFire[i]();
        });
    };
    
        2
  •  0
  •   Marius    15 年前

    为什么不使用数组并循环使用它呢?下面的代码将同时接受数组和单个事件处理程序。

    $.fn.foo = function( options ) {
        ...
        // trigger event
        if(typeof eventHandler == "Array"){
          for(var i=0; i<eventHandler.length; i++){
            options.eventHandler[i]();
          }
        }else{
          options.eventHandler();
        }
    }
    
    $('#bar').foo({ eventHandler: [myEventHandler, anotherEventHandler] })