예를 들어 이벤트 버블링을 중지하기 위해 IE는 cancelBubble을 사용하고 표준 브라우저는 stopPropagation을 사용합니다.
이벤트 소스 객체를 얻기 위해 IE는 srcElement를 사용하고 표준 브라우저는 target 등을 사용합니다.
jQuery는 주로 jQuery.Event 클래스와 jQuery.event.fix 메서드를 사용하여 기본 이벤트 개체를 복구하고 래핑합니다.
jQuery.event.fix 메소드는 다음과 같습니다
코드 복사
코드는 다음과 같습니다
수정: 함수( 이벤트 ) {
if ( 이벤트[ jQuery.expando ] ) {
반환 이벤트;
}
// 원본 이벤트 객체의 복사본을 저장합니다
// 및 "복제"하여 읽기 전용 속성을 설정합니다.
var originalEvent = event;
이벤트 = jQuery.Event(originEvent);
for ( var i = this.props.length, prop; i; ) {
prop = this.props[ --i ];
이벤트[ prop ] = 원본이벤트[ prop ];
}
// 필요한 경우 대상 속성 수정
if ( !event.target ) {
// srcElement가 정의되지 않을 수 있는 #1925 수정
event.target = event. src요소 || 문서;
}
// 대상이 텍스트 노드인지 확인(Safari)
if ( event.target.nodeType === 3 ) {
event.target = event.target.parentNode;
}
// 필요한 경우 관련 타겟 추가
if ( !event.관련Target && event.fromElement ) {
event.관련Target = event.fromElement === event.target ? event.toElement : 이벤트.fromElement;
}
// 누락된 경우 페이지X/Y를 계산하고 클라이언트X/Y를 사용할 수 있음
if ( event.pageX == null && event.clientX != null ) {
var doc = document.documentElement,
본문 = document.body;
event.pageX = event.clientX (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
event.pageY = event.clientY (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);
}
// 주요 이벤트에 대해 which 추가
if ( event.which == null && (event.charCode != null || event.keyCode != null) ) {
event.which = event.charCode != null ? event.charCode : event.keyCode;
}
// Mac이 아닌 브라우저에 MetaKey 추가(PC의 경우 ctrl, Mac의 경우 Meta 사용)
if ( !event.metaKey && event.ctrlKey ) {
event.metaKey = event. Ctrl 키;
}
// 클릭에 대한 추가: 1 === left; 2 === 중간; 3 === 오른쪽
// 참고: 버튼은 정규화되지 않았으므로 사용하지 마세요
if ( !event.which && event.button !== undefine ) {
event.which = ( event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
}
복귀 이벤트;
},
它主要做了以下工작
1,event = jQuery.Event(originEvent ); 该句创建了一个jQuery.Event类的实例对象,该对象修复及扩充上面刚刚提到了。
2, 一个循环将原生事件对象的所有属性拷贝给 1 中的이벤트对象。
for ( var i = this.props.length, prop; i; ) {
prop = this.props[ --i ];
이벤트[ prop ] = 원본이벤트[ prop ];
}
3, 统一事件源对象为 target 。
4, 统一事件相关对象为relativeTarget 。
5, 扩充了pageX, pageY 俙两属性首次Firefox에서는 X/Y 计算得到를 사용할 수 없습니다.性也是는 Firefox에서 매우 유용합니다.
7, 修复了metaKey.
8, 扩充了 which, 使用它获取鼠标按键值
细心的人可能注意到了,jQuery获取键盘按键值화鼠标按键值city是采用 which。它没有向其它属性一样去兼容W3C已有标准(버튼).给zChain.js添加包装事件对象의상대기업 。
zChain-0.7.1.js