jQuery插件:添加callback函数

我试图给我的插件callbackfunction,我希望它有点传统的方式:

myPlugin({options}, function() { /* code to execute */ }); 

要么

 myPlugin({options}, anotherFunction()); 

我如何处理代码中的参数? 它被视为一个完整的实体吗? 我很确定,我知道我将放置执行代码的位置,但是如何获取要执行的代码? 我似乎无法find关于这个话题的很多文献,所以先谢谢你的帮助。

只需在插件中执行callback:

 $.fn.myPlugin = function(options, callback) { if (typeof callback == 'function') { // make sure the callback is a function callback.call(this); // brings the scope to the callback } }; 

你也可以在选项对象中有callback:

 $.fn.myPlugin = function() { // extend the options from pre-defined values: var options = $.extend({ callback: function() {} }, arguments[0] || {}); // call the callback and apply the scope: options.callback.call(this); }; 

像这样使用它:

 $('.elem').myPlugin({ callback: function() { // some action } }); 

我不知道我是否正确理解你的问题。 但对于第二个版本:这将立即调用anotherFunction

基本上你的插件应该是这样的一种function:

 var myPlugin = function(options, callback) { //do something with options here //call callback if(callback) callback(); } 

你必须提供一个函数对象作为callback函数,所以要么function(){...}anotherFunction (without () )。

带回过去的一阵风。

值得注意的是,如果你有两个参数通过,例如:

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

然后你调用插件没有选项参数,但有一个callback,那么你会遇到的问题:

 $(selector).plugin(function() {...}); 

我用这个来使它更灵活一些:

 if($.isFunction(options)) { callback = options } 

改变你的插件function,采取第二个参数。 假设用户传递一个函数,那么这个参数可以被看作是一个常规函数。
请注意,您也可以将callback作为options参数的一个属性。

例如:

 $.fn.myPlugin = function(options, callback) { ... if(callback) //If the caller supplied a callback callback(someParam); ... }); 

我想这可能会帮助你

 // Create closure. (function( $ ) { // This is the easiest way to have default options. var settings = $.extend({ // These are the defaults. onready: function(){}, //Rest of the Settings goes here... }, options ); // Plugin definition. $.fn.hilight = function( options ) { //Here's the Callback settings.onready.call(this); //Your plugin code goes Here }; // End of closure. })( jQuery ); 

一个例子有点晚,但它可能是有用的。 使用参数可以创build相同的function。

 $.fn.myPlugin = function() { var el = $(this[0]); var args = arguments[0] || {}; var callBack = arguments[1]; ..... if (typeof callback == 'function') { callback.call(this); } }