1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
var CustomEvent = { events:{}, dispatchEvent:function(ev,data){ if(this.events[ev]){ var handlers=this.events[ev]; for(var i=0,l=handlers.length;i<l;++i){ try{ handlers[i](data); } catch(e){ } } } }, addEventListener:function(ev,handler){ if(!this.events[ev]){ this.events[ev]=[handler]; } else{ this.events[ev].push(handler); } }, removeEventListener:function(ev,handler){ if(this.events[ev]){ var handlers=this.events[ev]; for(var i=0,l=handlers.length;i<l;++i){ if(handlers[i]==handler){ handlers.splice(i); break; } } } } } |
laohe 2012 年 10 月 24 日
var Events = {
bind: function () {
if ( !this.o ) {
this.o = $({});
}
this.o.bind.apply(this.o, arguments);
},
trigger: function() {
if ( !this.o ) {
this.o = $({});
}
this.o.trigger.apply(this.o, arguments);
}
};
你可以参照这个思路,也许会倒腾出更简单的。
F 2012 年 5 月 15 日
哥们,handlers.splice(i) 在 fire fox 下把所有的 handler 都删掉了,囧。
F 2012 年 5 月 15 日
此段代码 IE8 不兼容
removeEventListener 方法失败,必须写成 handlers.splice(i,1); 才可删除 handler
azrael 2012 年 5 月 15 日
嗯, 谢谢校正