Javascript之浏览器兼容EventUtil

var EventUtil = {
//添加事件处理程序 addHandler:
function (element, type, handler) { if (element.addEventListener) { element.addEventListener(type, handler, false);
//DOM2中定义的事件处理程序,IE9,Firefox,Safaei,Chrome和Opera支持此方法。 }
else if (element.attachEvent) { element.attachEvent("on" + type, handler);
//在IE中attachEvent()方法是在全局作用域中运行的,也就是this等于window。而且如果给一个事件添加了多个处理程序,其执行顺序是逆序的。 }
else { element["on" + type] = handler;
//DOM0级方法,其只对每个事件只支持一个事件处理程序。 } },
//移除事件处理程序 removeHandler:
function (element, type, handler) { if (element.removeEventListener) { element.removeEventListener(type, handler, false);
//在使用移除方法时,其传入参数要和添加处理程序时相同,也就意味着添加的匿名函数将无法移除。 }
else if (element.detachEvent) { element.detachEvent("on" + type, handler);
//与上面相同,也是不可以移除匿名函数的。
//为了解决这个问题,我们可以把匿名函数的引用传入,而不是直接传入匿名函数。 }
else { element["on" + type] = null;
//DOM0级方法 } }, //获取事件对象 getEvent:
function (event) { return event ? event : window.event;
//在兼容DOM的浏览器中,event是简单的传入和返回;在IE中,event是未定义的(undefined),而是一个window对象属性。 },
//获取事件目标 getTarget:
function (event) { return event.target || event.srcElement;
//IE中的事件目标属性是srcElement。 },
//取消事件的默认行为
//只有在cancelable属性为true时,才可以取消事件的默认行为。 preventDefault:
function (event) { if (event.preventDefault) { event.preventDefault(); } else { event.returnValue = false;
//IE中的事件对象有returnValue属性,默认为true,设置为false可以取消默认行为。 } },
//取消事件的捕获或者冒泡 stopPropagation:
function (event) { if (event.stopPropagation) { event.stopPropagation();
//可以用来取消事件捕获和冒泡。 }
else { event.cancelBubbles = true;
//兼容IE,只可以取消事件冒泡。 } }, getRelatedTarget:
function (event) { if (event.relatedTarger) { return event.relatedTarget; } else if (event.toElement) { return event.toElement; } else if (event.fromElement) { return event.fromElement; } else { return null; } } }

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。