而不是使用jquery事件系統,我會實現一個模仿它使用jQuery.Callbacks方法。
var myClass = function(){
this._callbacks = {};
};
myClass.prototype = {
addEvent: function(evname,callback) {
if (!this._callbacks[evname]) {
this._callbacks[evname] = $.Callbacks();
}
this._callbacks[evname].add(callback);
},
removeEvent: function(evname) {
if (!this._callbacks[evname]) {
return;
}
this._callbacks[evname].remove();
//Might need this too:
//this._callbacks[evname] = null;
},
triggerEvent: function(evname) {
if (this._callbacks[evname]) {
this._callbacks[evname].fire();
}
}
};
var foo = new myClass();
foo.addEvent("foo",function(){
console.log('foo');
});
foo.triggerEvent("foo");
foo.removeEvent("foo");
// event was removed, the below line won't do anything.
foo.triggerEvent("foo");
http://jsfiddle.net/kEuAP/
但是,爲了回答你的問題,我沒有看到你在做什麼其他比它不記錄,並可能因版本更改功能的任何直接的問題(儘管它適用於所有當前可用的版本1.2.6+)。
你爲什麼要這麼做? – 2012-02-01 16:38:52
如果你想要一個事件系統,我會建議你自己創建一個事件系統,或者使用一個適用於典型JS對象的現有系統。他們不難寫,而且對於你想要做的更具體。 – 2012-02-01 16:45:37
我想不出一個很好的理由來做到這一點。 – jbabey 2012-02-01 16:49:40