>  기사  >  웹 프론트엔드  >  js 이벤트 처리 함수 간의 이벤트 객체가 일치합니까_javascript 기술입니까?

js 이벤트 처리 함수 간의 이벤트 객체가 일치합니까_javascript 기술입니까?

WBOY
WBOY원래의
2016-05-16 18:08:101084검색

예전에 이런 작은 문제가 발생했는데 요약하지 않았습니다
지금 다시 발생했습니다. 정확한 결론을 내리기 위해 기록했습니다.
예: 여러 실행 함수 사이에 Event 개체가 있습니까?

예:

코드 복사 코드는 다음과 같습니다.

dom.addEvent('click', fna);
dom.addEvent('click',fnb)

1: Event 객체에 추가된 속성 fna는 이후에 실행되는 fnb 함수의 Event 개체에 대한 것입니다.
2: fna/fnb 함수 실행 시 Event 개체가 Eventfna====Eventfnb와 일치합니까? >표준 문서가 너무 깁니다
여기서 설명은 어디에 있나요? 게으르다...
Jquery의 경우 동일한 이벤트에 대해 여러 실행 함수 간의 Event 개체가 일치합니다. Jquery 라이브 바인딩 이벤트 구현 시 반복적으로 실행될 수 있는 liveHandler 함수의 경우 Event 객체에 추가로 제공된 liveFired 속성을 사용하면 처음 실행된 이후 liveHandler 시작 부분에서 함수가 종료됩니다. 🎜>



코드 복사
코드는 다음과 같습니다. if (event.liveFired === this | | ...) { return;
}
///....
event.liveFired = this


테스트:



코드 복사
코드는 다음과 같습니다. function a(e) { e.abc = function () {
alert(a );
};
prevIeEvent=window.event;
function b(e,event) {
e.abc(); //fn
alert(e === prevEvent); //true
if(event=window.event){
alert(event===e); false
alert(event== =prevIeEvent);//false
alert(event===prevEvent);//false
}
}
var t = document.getElementById(" p");
if ( t.addEventListener) {
t.addEventListener('click', a, false);
t.addEventListener('click', b, false)
} else {
t.attachEvent(' onclick', b);
t.attachEvent('onclick', a)
}


네이티브 바인딩 이벤트 메소드의 경우 [addEventListener, attachmentEvent], 다중 실행 함수의 경우 Event 객체(매개변수를 통해 전달된 이벤트)가 일치합니다. IE에서는 window.event를 통해 얻은 Event 객체가 일치하지 않습니다. 매개변수를 통해 전달된 이벤트와 동일하지 않습니다.
버블링 이벤트의 경우:



코드 복사

jquery에서는 이벤트가 트리거 형식으로 트리거될 때 버블링 이벤트 이벤트 객체는 합동입니다. 실제 사용자 작업에 의해 트리거되는 이벤트는 동일한 개체가 아닙니다. 맞춤 속성도 전달할 수 없습니다. 값 설정은 실제 원본 이벤트에 영향을 주지 않습니다.
네이티브 바인딩 이벤트 메소드 사용 [addEventListener,attachEvent]:



코드 복사

코드는 다음과 같습니다. function a(e) { e.abc = function() { alert(a) }
prevEvent = e; ;
}
function b(e,event) {
alert(e.abc); //fn
alert(e === prevEvent) //true
if(event) =window .event){
alert(event===e); //false
alert(event===prevIeEvent);//false
alert(event===prevEvent);// false
}
}
var t = document.getElementById("p");
if (t.addEventListener) {
t.addEventListener('click', a, false);
document.body.addEventListener('click', b, false)
} else {
t.attachEvent('onclick', a)
document.body.attachEvent('onclick' , b );
}


attachEvent가 이벤트에 바인딩되면 IE의 버블링 이벤트 사이에 있는 함수 내의 Event 개체가 일치하지 않게 됩니다. FF 등은 addEventListener와 일치하는 객체입니다.
실제로 IE가 아닌 경우 이벤트 개체 전파 간의 처리 기능 또는 동일한 DOM 노드에 의해 트리거되는 여러 기능 간의 이벤트 개체가 일치합니다. 바인딩 형식 [addEventListener/DOM0]과는 아무런 관련이 없습니다.
IE에서는 동일한 DOM 노드에 의해 트리거된 여러 함수 간의 매개변수를 통해 전달된 이벤트 객체(attachEvent)만 일치합니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.