그러나 FireFox에는 그러한 개체가 없습니다. 중첩된 함수 호출이 있는 경우 다음 시나리오와 같이 이벤트를 지속적으로 전달해야 합니다.
function Test(event,dom){
Test1 (이벤트) ;
}
function Test1(이벤트){
Test2(이벤트);
}
function Test2(이벤트){
alert(event.target.id);
}
Test2 메소드에서 이벤트를 사용해야 하는 경우에는 이렇게 작성하면 됩니다. 새 함수 추가와 같은 특정 시나리오에서 원래 Test2 메서드를 수정하고 이벤트 개체에 액세스해야 하며 원래 Test2 메서드의 서명이 매개변수 이벤트 없이 Test2()인 경우 Test2()를 수정해야 합니다. Test2(event)에 대한 이러한 수정은 메소드의 오버로드이지만 원래 메소드 서명도 파괴합니다.
FireFox에 window.event와 같은 전역 변수가 이벤트를 가져오나요?
안타깝게도 FireFox의 개체 모델에서는 사용할 수 없지만 해결 방법을 사용하여 얻을 수 있습니다. 예:
function GetEvent(caller){
if (document.all)
return window.event; //IE의 경우
if(caller == null || typeof(caller) != "function")
return null; 🎜>while( caller.caller != null){
caller = caller.caller;
}
return caller.arguments[0]
}
사용 document.all 여기 IE 브라우저인지 판단하는 것은 좋지 않습니다. 판단하려면 UserAgent를 사용해야 합니다. JQuery와 같은 라이브러리에는 좋은 구현이 있습니다.
이런 방식으로 위의 Test2 메서드는 메서드 서명을 수정할 필요가 없습니다.
코드 복사 코드는 다음과 같습니다. 다음과 같습니다:
function Test2(){
var event = GetEvent(Test2)
alert(GetEventTarget(event).id)
}
function GetEventTarget (event){
if (document.all)
return event.srcElement;
return event.target;
}
GetEvent 메서드를 작성할 수 있는 이유 이벤트를 받으시겠습니까?
Firefox에서는 이벤트 모델의 초기 이벤트 호출이 이벤트를 메서드에 명시적으로 전달하므로 GetEvent 메서드를 작성하여 JavaScript를 호출하는 이벤트를 가져올 수 있기 때문입니다.
screen.width-300)this.width=screen.width-300" border=0>