javascript 이벤트: 이벤트 대상 getEvent 함수 가 져 오기

javascript 개발 에서 우 리 는 페이지 의 이벤트 대상 을 자주 가 져 온 다음 에 이 사건 들 을 처리 합 니 다. 예 를 들 어 아래 의 getEvent 함 수 는 자바 script 의 페이지 이벤트 대상 을 가 져 오 는 것 입 니 다.
function getEvent(event){
	return event || window.event;
}

   우 리 는 getEvent 를 사용 할 때 이렇게 호출 할 수 있 습 니 다.
function foo(event){
	var evt = getEvent(event);
	alert(evt);
}

   그리고 foo 함 수 를 onclick 이벤트 에 연결 합 니 다.
    그러나 자주 사용 하 는 것 은 foo 함수 에 인자 가 없 거나 첫 번 째 인자 가 들 어 오지 않 았 습 니 다. 저 희 는 arguments [0] 를 통 해 첫 번 째 인 자 를 얻 을 수 있 습 니 다.
    IE 에서 이 벤트 는 윈도 우즈 이벤트 의 전역 변수 이 고 Firefox 등 브 라 우 저 에 서 는 이벤트 가 첫 번 째 매개 변수 로 foo 함수 에 들 어 오기 때문에 getEvent 는 다음 과 같이 변경 할 수 있 습 니 다.
function getEvent(event){
	return arguments[0] || window.event;
}

   이 때 일부 버 전의 브 라 우 저, 예 를 들 어 Firefox 에서 이벤트 대상 을 가 져 오지 못 하 는 문제 가 발생 할 수 있 습 니 다. 사실 이벤트 의 트리거 는 다음 과 같은 방식 으로 볼 수 있 습 니 다.
function  {
    foo();
}

   이렇게 하면 첫 번 째 함 수 는 onclick 입 니 다. 즉, 이 벤트 는 기본적으로 첫 번 째 매개 변수 로 들 어 옵 니 다. foo 함 수 는 이 벤트 를 매개 변수 로 들 어 오지 않 아서 getEvent 의 유연성 을 심각하게 제한 하기 때문에 getEvent 함 수 를 수정 해 야 합 니 다.
    우 리 는 arguments. callee 가 함수 자체 라 는 것 을 알 고 있 습 니 다. 익명 함수 에서 재 귀적 으로 사용 할 수 있 습 니 다. 그러면 arguments. callee. caller 는 이 함수 의 이전 함 수 를 호출 하 는 함 수 를 말 합 니 다.
    예 를 들 어 getEvent 의 caller 는 foo 이 고 foo 의 caller 는 onclick 이 며 순서대로 유추 합 니 다.
   그래서 우리 의 getEvent 함 수 는 결국 이렇게 쓸 수 있 습 니 다.
function getEvent(){
	if(window.event){
		return window.event;
	}
	var f = arguments.callee.caller;
	do{
		var e = f.arguments[0];
		if(e && (e.constructor === Event || e.constructor===MouseEvent || e.constructor===KeyboardEvent)){
			return e;
		}
	}while(f=f.caller);
}

다음으로 이동:http://blogread.cn/it/article/3997?f=wb

좋은 웹페이지 즐겨찾기