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