由于ie和其它瀏覽器的區(qū)別,在對DOM進行事件注冊的和使用event對象的時候,需要一種快捷的封裝好的工具方法。
var EventUtil = {
addHandler: function(element, type, handler) {
if (element.addEventListener) { //dom2級事件處理程序
element.addEventListener(element, type, handler);
} else if (element.attachEvent) { //檢測ie的事件處理程序
element.attachEvent('on' + type, handler);
} else {
element['on' + type] = handler; //dom0級事件處理程序
}
},
getEvent: function(event) {
return event ? event : window.event;
},
getTarget: function(event) {
return event.target ? event.target : event.srcElement;
},
preventDefault: function(event) { //阻止默認(rèn)行為,比如鏈接的跳轉(zhuǎn),表單的提交
if (event.preventDefault) {
event.preventDefault();
} else {
event.returnValue = false; //ie下阻止默認(rèn)行為
}
},
removeHandler: function(element, type, handler) {
if (element.removeEventListener) {
element.removeEventListener(element, type, handler);
} else if (element.detachEvent) {
element.detachEvent('on' + type, handler);
} else {
element['on' + type] == null;
}
},
//由于事件在dom層中傳播會造成事件捕捉和事件冒泡,這里直接在元素上添加事件而阻止其在
dom中傳播
stopPropagation: function(event) {
if (event.stopPropagation) {
event.stopPropagation();
} else {
event.cancelBubble = true;
}
}
};
上面就是封裝的一個工具對象用法大概如下
oDiv.onclick = function(event) {
event = EventUtil.getEvent(event);
var target = event.getTarget(event);
EventUtil.stopPropgation(event);
}