2013-08-05 1 views
0

이벤트 리스너를 추가하기위한 크로스 브라우저 코드를 작성한 후 크롬이 펑키 한 것으로 시작한 이유는 무엇입니까?크롬이 함수 인수를 올바르게 인식하지 못합니다.

이벤트 리스너 코드 추가 :

function addEventListener(Elm,Type,Func) 
{ 
    if(Elm.attachEvent) 
     Elm.attachEvent((Type.substr(0,2) == 'on' ? Type : 'on'+Type),Func); 
    else 
     Elm.addEventListener(Type,Func); 
} 

코드 호출 방법 :

addEventListener(window,'load',SetSize); 
addEventListener(window,'resize',SetSize); 

오류 : 당신은 내가에 인수를 통과 한 것을 볼 매우 명확하게 할 수

Uncaught TypeError: Object load has no method 'addEventListener' 

정확한 순서는 아직 순서대로 해석되지 않습니다.

답변

6

window.addEventListener을 덮어 썼습니다.

네이티브 서명은 event_name, callback이지만, 사용자의 주소는 object, event_name, callback입니다.

변경 당신은 window.addEventListener를 재정의 한 my_framework.addEventListener

+0

그래 덮어 쓰기 때문에

이 5 월

가 발생합니다. 절대적으로 윈도우에 속한 것이 무엇인지 모릅니다. – user1763295

+0

실제로'event_name, callback, useCapture'입니다. 'useCapture'를 생략하면 Firefox <6에서 작동하지 않습니다. – Esailija

3

같은 함수 addEventListener하거나 네임 스페이스의 이름입니다. 전역 네임 스페이스에 선언 뭐든지 기본적으로 그렇게 window에 속하는 :

function addEventListener(...) { 

} 

과 같이 동일합니다

window.addEventListener = function(...) { 

} 

기본 addEventListener의 인수 서명, listenereventName이지만 Elm을 가지고, Type, Func.

함수 본문 안에서 Elm.addEventListener을 수행하고 'load'SetSize을 전달하고 있습니다. 이 호출에서 함수는 이 window이므로 함수를 다시 호출하고 이번에는 'load' 문자열에 addEventListener을 호출하려고 시도합니다.이 메서드는 문자열에 해당 메서드가 없기 때문에 작동하지 않습니다.

함수의 이름을 변경하거나 네임 스페이스를 변경하면 제대로 작동합니다.

2

나는 창 개체에 .attachEvent 또는 .addEventListener가 없다고 말합니다. 당신의 기능을하여 addEventListener라는 이름과 window.addEventListener, 감사합니다 그것을이었다()

관련 문제