IE7、IE9、Chrome 18、Firefox 12のイベント(クリックなど)に関数をバインドしようとすると少し混乱します。しかし、私がイベントに関連する機能を削除しようとすると、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コードは2005年9月にJohn Resigによって投稿されたものに基づいているようです。コメントにはコードに関するかなりの批判があります。特にメモリーリークに関するものです。 [* Douglas *](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