var fix = function(event) {
var props = "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget "
+"data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY "
+"prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement"
+" view wheelDelta which".split(" ");
// 存储原始事件对象的副本
// 和“clone”,设置只读属性
var originalEvent = event;
event = {
originalEvent: originalEvent
};
for (var i = props.length, prop; i;) {
prop = props[--i];
event[prop] = originalEvent[prop];
}
//添加的preventDefault 取消事件的默认动作。和stopPropagation,停止事件的传播 因为它们不会在工作 在 克隆 的event
event.preventDefault = function() {
if (this.originalEvent.preventDefault)
this.originalEvent.preventDefault();
this.originalEvent.returnValue = false;
};
event.stopPropagation = function() {
if (this.originalEvent.stopPropagation)
this.originalEvent.stopPropagation();
//原始事件的cancelBubble属性设置为true(IE)
this.originalEvent.cancelBubble = true;
};
event.timeStamp = event.timeStamp || +new Date
// 如果有必要,修复target属性,
if (!event.target) {
event.target = event.srcElement || document;
}
// 检查target是否为 textnode 节点(safari)
if (event.target.nodeType === 3) {
event.target = event.target.parentNode;
}
// relatedTarget 返回指针刚刚离开的元素(不支持 IE)。fromElement 支持 IE
if (!event.relatedTarget && event.fromElement) {
event.relatedTarget = event.fromElement === event.target ? event.toElement: event.fromElement;
}
// 计算pageX/ y, 如果没有,clientX/ Y提供
if (event.pageX == null && event.clientX != null) {
var doc = document.documentElement,
body = 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);
}
// Add which for key events
if (event.which == null && (event.charCode != null || event.keyCode != null)) {
event.which = event.charCode != null ? event.charCode: event.keyCode;
}
// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
if (!event.metaKey && event.ctrlKey) {
event.metaKey = event.ctrlKey;
}
// Add which for click: 1 === left; 2 === middle; 3 === right
// Note: button is not normalized, so don't use it
if (!event.which && event.button !== undefined) {
event.which = (event.button & 1 ? 1 : (event.button & 2 ? 3 : (event.button & 4 ? 2 : 0)));
}
return event;
}
document.οnclick=getE;
function getE(e){
e=fix(e); alert(e.pageX);
}
//IE
document.οnclick= function (){
e=fix(event); alert(e.pageX);
}