我有點困惑,當我嘗試在IE7中,IE9,Chrome瀏覽器18,火狐12綁定一個處理函數的事件(像click)它的工作很好,但是當我嘗試刪除事件的相關功能時,只有IE7和Firefox才能夠卸載該功能。 這是我使用的代碼,我做錯了什麼?跨瀏覽器的事件處理程序(添加,刪除,觸發器)
bindEvent:function(el,evtType,fn){
if(el.addEventListener){
el.addEventListener(evtType,fn,false);
} else {
if(el.attachEvent){
var _el=el;
var f = function(){fn.call(_el,window.event);}
el.attachEvent('on'+evtType, f);
el[fn.toString()+evtType]=f;
//el.attachEvent('on'+evtType,fn) ;
} else {
el['on'+evtType]=fn;
}
}
return el;
},
removeEvent: function(el,evtType, fn) {
if(el.removeEventListener){
el.removeEventListener(evtType, fn, false);
}else if(el.detachEvent){
el.detachEvent('on'+evtType,el[fn.toString()+evtType]);
el[fn.toString()+evtType]=null;
}else{
el['on'+evtType]=function(){};
}
return el;
}
我的代碼來測試此是:
var a = document.getElementById('just_a_div');
bindEvent(a,'click',function(){alert('Hi There');});
,並設法去掉我用幾乎相同:
removeEvent(a,'click',function(){alert('Hi There');});
任何意見或一些預製的片段,可以做這項任務有效地在所有瀏覽器上? 希望能出現一個解決方案,永遠感激。
爲子孫後代的OP代碼似乎是基於什麼作者:John Resig的2005年9月有代碼中的註釋一些實質性的批評,特別是那些與內存泄漏,應考慮(例如那些由[*道格拉斯*](http://ejohn.org/projects/flexible-javascript-events/#comment-5882))。他們沒有在帖子中解決。另請參閱在批判[*什麼是不對的廣泛使用AJAX事件處理程序的註冊碼?*](http://pankaj-k.net/weblog/2007/07/what_is_wrong_with_this_widely.html)。 – RobG 2014-12-15 06:40:57