Javascript 绑定/侦听事件

Javascript 绑定/侦听事件,javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,我制作了一个jQuery插件,可以在定时事件中调用它的函数。我想让那些使用插件的人能够在调用这些函数时收听它们,并在触发这些函数时添加要执行的代码 这可能是一个简单的问题,但我无法理解。实现这一目标的最佳方法是什么?我只能找到有关将处理程序绑定到事件的信息,而不能找到事件到事件的信息。我想要下面的代码: $( "body" ).bind( "pluginInstance.functionName", function() { console.log( "triggered" );

我制作了一个jQuery插件,可以在定时事件中调用它的函数。我想让那些使用插件的人能够在调用这些函数时收听它们,并在触发这些函数时添加要执行的代码

这可能是一个简单的问题,但我无法理解。实现这一目标的最佳方法是什么?我只能找到有关将处理程序绑定到事件的信息,而不能找到事件到事件的信息。我想要下面的代码:

  $( "body" ).bind( "pluginInstance.functionName", function() {
    console.log( "triggered" );
  });

您可以调用传递给插件的声明函数。例如:

$.fn.myPlugin = function(callback){
   callback();
}


$('elem').myPlugin(function(){

    console.log("triggered");

})
如果您想更复杂一些,可以将回调函数设置为一个对象,并引用该对象而不是参数,这更具体、更容易阅读:

$.fn.myPlugin = function(options){
   options.callback();
}


$('elem').myPlugin(
   var options = {
      callback: function(){
         console.log('triggered')
      }
   }
)

我会允许插件消费者将散列传递给插件的构造函数,其中包含您预先确定的可选事件方法/属性。我还会在你的插件中定义一个“defaults”对象,它定义用户可以覆盖的可用属性和事件。可以使用jQuery方法复制用户未在构造函数中传递的任何默认值

例如,您可能有一个“onSlide”事件,用户可以在插件中为其添加回调。我将按如下方式设置插件:

$.fn.newPlugin = function(options){
   var defaults = {
        onSlide: null,
        onRightClick: null
   };
   var settings = $.extend(defaults, options);
   //Pretend something in your plugin happens and you want to optionally 
   //invoke the user's passed in onSlide method if they set it
   if(settings.onSlide != null){
       settings.onSlide();
   }
}
当用户使用您的插件时,他们可以将“onSlide”处理程序传递到构造函数中:

$('elem').newPlugin({
    onSlide: function(){
        alert('slide event triggered');
    }
});
您可以使用自定义事件。看到和

从插件中,您可以调用以下命令来触发事件

$(this.element).trigger('pluginInstance.functionName');
并像处理任何其他DOM事件一样侦听它

$('body').bind( "pluginInstance.functionName", function() {
    console.log( "triggered" );
});

$('body').myPlugin();

也许是这个?是的,这是有道理的,这似乎与上面的评论逻辑相似,这也是有道理的。我现在就去试试。谢谢,成功了。这和评论中的链接帮了大忙,谢谢。很高兴我能帮上忙。这是一个回调,不是一个事件,你只能注册一个handler@JuanMendes看看这里的文档,如果两段不同的代码需要侦听同一事件,您可以传递一个选项hashNot。通常,您只需在“custom.event”上多次调用$jqueryl.on,它们都将被删除notified@JuanMendes这一点您肯定是对的,我想您必须在传入的处理程序中触发全局事件。我更多地遵循了jQueryUI小部件工厂中使用的模式,在那里,它们允许您为事件传递函数。你的想法很有道理。我将对你的评论投赞成票