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); } }