2013-02-08 3 views
0

DOM 이벤트에서 자바 스크립트 함수를 호출 할 때 DOM 이벤트를 나타내는 이벤트 변수에 액세스 할 수있는 함수 내에 이 있습니까? 장면 뒤에서 어떻게 작동합니까? 함수가 이벤트 인수를하지 않으며, 우리가 argusments 개체를 사용하지 않기 때문에 ..어떻게 javascript 함수가 이벤트 변수에 액세스 할 수 있습니까?

+1

이것은 'event' 객체를'window' 객체의 속성으로 제공하는 IE에서만 사실입니다. 왜? 때문에. – nnnnnn

+1

이벤트 발생시 설정되는'window.event'가 있습니다. @nnnnnn IE가 아닌 경우에도 마찬가지입니다. 그러나이 기법을 사용하는 것은 바람직하지 않습니다. – Christoph

+0

크리스토프, 왜 낙담하나요? 어떤 이벤트가 현재 호출 스택을 호출했는지 알아내는 다른 방법이 있습니까? – ciochPep

답변

0

대한 간단한 요약을 DOM 이벤트 :

EventListener를 결합하는 올바른 방법은 다음과 같습니다

var elem = document.querySelector("div"); 

elem.addEventListener("event-type",function(e){ /*e is the event object*/ }); 

addEventListener()event-type 이벤트를 DOM-Element elem에서 수신합니다.

addEventListener()은 항상 이벤트 객체를 첫 번째 매개 변수로 함수에 전달합니다. 이 매개 변수는 기능 헤드 (일반적으로 e) 또는 arguments[0]을 통해 정의하여 액세스 할 수 있습니다. this은 이벤트가 발생한 Dom-Element를 나타냅니다. (버전 8까지) 이벤트 핸들러 바인딩에 대한 독점적 인 방법이

IE는 : this 대신 DOM 요소의 전역 객체를 참조하고, event 개체 :

elem.attachEvent("event-type",function(){}) 

그것은 몇 가지 단점이있다 이 아니며이 매개 변수로 전달됩니다.

그러나 Microsoft는 항상 문서에서 발생한 마지막 이벤트가있는 window.event을 도입했습니다. 그래서 다음과 같이 함수에서 사용할 수 있습니다 :이 window.event 여러 브라우저에서 사용할 수

function(){ 
    var e = window.event; 
} 

,하지만 당신은에 의존하거나 (대부분의 전역 변수에 권장되는)을 사용하지 않아야합니다.

+0

이벤트를 다르게 바인딩하면 어떻게됩니까? (1) ciochPep

+0

@ciochPep 당신은 이것을 피해야 만하지만,'on.eclick = 'myFunc (event, params)'함수에 명시 적으로'window.event'를 건네 주어 이벤트 객체를 넘겨 줄 수 있습니다. – Christoph

관련 문제