2011-09-23 2 views
4

임의의 자바 스크립트 함수에서 업스트림 이벤트를 결정하고 싶습니다., arg로 전달되지 않은 경우 어떻게 현재 이벤트를 결정합니까?

이벤트 수신기 함수가 이벤트를 전달하지 못했습니다. 현재 함수입니다. afaik, window.event이 아니며 WC3이 아니며 사용할 수 없습니다.

 
function listener(e) { subfunc(e.target); } 

function subfunc(element) { 
    // here I wish to know which if any event responsible for me being called 
    var event = ?; 
    switch(event.type) { ... } 
} 

기능 subfunc()은 현재 이벤트를 어떻게 결정합니까?

는 (- 그것은 틀림 보인다 - 전에 물어 보는 질문이있는 경우 죄송합니다.하지만 그것을 아래로 추적 할 수 없습니다)

+0

합니다. – spender

+2

유일한 기회는'e.target'뿐만 아니라'subfunc'에'e'를 전달하는 것입니다. 또는'listener' 내부에'window.event = e;'를 설정했지만, 이벤트 객체를 전달하는 것이 나에게 더 깨끗한 접근 방법 인 것 같습니다. –

+0

@Felix -'window.event'를 설정하면, 그 상태 공간을 유지하려고 시도하는 것이 위험 해 보입니다. –

답변

2

당신은 할 수 있습니다 :

또한
function listener(e) { subfunc.call(this, e); } 

function subfunc(e) { 
    var element = this; //<- 'this' points to your element, 'e.type' is event type 
    switch(e.type) { ... } 
} 

다른 방법 : 당신은 할 수 없습니다 AFAIK

function listener(e) { subfunc.call(e, e.target); } 

function subfunc(element) { 
    var event = this; //<- 'this' points to your event object 
    switch(event.type) { ... } 
} 
+0

좋은 아이디어. 내 문제는'subfunc'가 스택에서 깊숙한 곳이 될 수 있기 때문에 각각의 중간에있는 함수는'this' 나'e'를 전달할 필요가 있다는 것입니다. –

2

수는 없습니다 그. 다른 하나의 신뢰할 수있는 방법으로 액세스 할 수있는 속성은 하나뿐입니다. event.target = this (함수가 이벤트 리스너의 범위 내에서 호출 된 경우).

이벤트 개체는 subfunc으로 전달되어야합니다.

관련 문제