插件源碼jquery.callback.js
插件開源地址: https://gist.github.com/4580276
/**
* @fileOverview 本外掛程式用於為jQuery方法新增回呼函數,可在類別方法或實例方法中新增任何自訂的回呼函數而不影響原方法的行為
* @dependency jQuery1.7
* @author huhai
* @since 2013-01-21
*/
(function($){
$._callbacks = {};
$._callbacks_ = {};
$._alias = {};
$._alias_ = {};
$.extend({
/**
* @decription 給方法加入回呼函數
* @param funcName : string 需要加入回呼的函數名稱
* @param callback : function 回呼函數(如需移除,不要使用匿名方法)
* @param static : boolean 是否為類別方法,預設為false
*/
addCallback : function(funcName, callback, static){
if("string" === typeof(funcName) && $.isFunction(callback)){
if(static === true){
if($[funcName] && $ .isFunction($[funcName])){
if(!this._callbacks[funcName]){
this._callbacks[funcName] = $.Callbacks();
}
this._callbacks [funcName].add(callback);
if(!$._alias[funcName]){
$._alias[funcName] = $[funcName];//寄存原來的類別方法
$[funcName] = function(){//代理類別方法;
var result = $._alias[funcName].apply(this, arguments);
$._callbacks[funcName].fireWith(this, arguments);
return result;
};
}
}
}else{
if($.fn[funcName] && $.isFunction($.fn[funcName] )){
if(!this._callbacks_[funcName]){
this._callbacks_[funcName] = $.Callbacks();
}
this._callbacks_[funcName].add(callback).add(callback). );
if(!$._alias_[funcName]){
$._alias_[funcName] = $.fn[funcName];//寄存原來的實例方法
$.fn[funcName] = function(){//代理實例方法;
var result = $._alias_[funcName].apply(this, arguments);
$._callbacks_[funcName].fireWith(this, arguments);
return result;
};
}
}
}
}
},
/**
* @decription 移除給方法新增的回呼函數
* @param funcName : string 已新增回調的函式名稱
* @param callback : function 回呼函數
* @param static : boolean 是否是類別方法,預設為false
*/
removeCallback: function(**funcName, callback , static){
if("string" === typeof(funcName) && $.isFunction(callback)){
if(static === true){
if($[funcName] && $.isFunction($[funcName])){
if(this._callbacks[funcName]){
this._callbacks.remove(callback);
}
}
}else{
if($.fn[funcName] && $.isFunction($.fn[funcName])){
if(this._callbacks_[funcName]){
this._callbacks_.remove(callback);
}
}
}
}
}
});
})(jQuery);
用法實例:
HTML