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; } } }
时间: 2024-07-31 15:04:16