IE下:
//添加事件句柄
function(oELement,sEvent,fnHandler){
oELement.attachEvent('on' + sEvent,fnHandler);
//取消事件句柄
function(oElement,sEvent,fnHandler){
oElement.detachEvent('on' + sEvent,fnHandler);
}
其他瀏覽器下(當(dāng)然,只有IE8及更早的版本不支持,Opera 7.0 及 Opera 更早版本也不支持):
//添加事件句柄
function(oELement,sEvent,fnHandler){
oElement.addEventListener(sEvent,fnHandler,false);
}
//取消事件句柄
function(oELement,sEvent,fnHandler){
oElement.removeEventListener(sEvent,fnHandler,false);
}
原因:
事件觸發(fā)順序有兩種:事件捕獲與事件冒泡。
??1.冒泡型事件:事件按照從最特定的事件目標(biāo)到最不特定的事件目標(biāo)(document對(duì)象)的順序觸發(fā)。
??2.捕獲型事件(event capturing):事件從最不精確的對(duì)象(document 對(duì)象)開始觸發(fā),然后到最精確(也可以在窗口級(jí)別捕獲事件,不過(guò)必須由開發(fā)人員特別指定)。
??Chrome瀏覽器支持事件捕獲與事件冒泡,添加事件句柄時(shí),默認(rèn)為true,執(zhí)行事件捕獲,設(shè)置為false,為事件冒泡。而IE只支持事件冒泡,因此添加事件句柄的方法不同。
兼容性寫法:
<script type="text/javascript">
var EventUtil = {
addHandler: function (oElement, sEvent, fnHandler) {
oElement.addEventListener ? oElement.addEventListener(sEvent, fnHandler, false) : oElement.attachEvent("on" + sEvent, fnHandler)
},
removeHandler: function (oElement, sEvent, fnHandler) {
oElement.removeEventListener ? oElement.removeEventListener(sEvent, fnHandler, false) : oElement.detachEvent("on" + sEvent, fnHandler)
},
addLoadHandler: function (fnHandler) {
this.addHandler(window, "load", fnHandler)
}
}
</script>