??? 用網(wǎng)頁(yè)調(diào)整格式實(shí)在是太復(fù)雜了,湊合看看吧。。。。。
-
? 事件處理分為兩種,一種為冒泡型事件,另一種為捕獲型事件
? 冒泡型事件 :是從特定目標(biāo)到最不特定的目標(biāo)
? 捕獲型事件 :是從最不特定的對(duì)象開(kāi)始觸發(fā),一直到最精確的對(duì)象。
?
?DOM 標(biāo)準(zhǔn)同時(shí)支持兩種事件,并且捕獲型事件先發(fā)生。
?window-->document-->body-->div-->div-->body-->document-->window
?
? 比較特殊的,在 DOM 事件模型中,文本節(jié)點(diǎn)也會(huì)觸發(fā)事件,而 IE 中是不會(huì)的。
?window-->document-->body-->div-->text-->text-->div-->body-->document-->window
?
? -
IE 和 DOM 在事件及事件處理中有很多不一樣的。
-
? 對(duì)于加載監(jiān)聽(tīng)和移除監(jiān)聽(tīng)的語(yǔ)法
? 在 IE 中使用
??[Object].attachEvent("name_of_event_handler", fnHandler);
??[Object].detachEvent("name_of_event_handler", fnHandler);
? 兩個(gè)參數(shù):要分配的事件處理函數(shù)的名字 和 事件處理函數(shù)
??[Object].attachEvent("onclick", fnHandler);
?? 與 [Object].onclick = fnHandler; 的作用是一樣的。
??
? 在 DOM 中使用
??[Obejct].addEventListener("name_of_event", fnHandler, bCapture);
??[Obejct].removeEventListener("name_of_event", fnHandler, bCapture);
? 三個(gè)參數(shù): 1 :事件名稱。 2 :事件處理函數(shù)。 3 :用于冒泡階段( false )或者用于捕獲階段( true )。
??[Obejct].addEventListener("click", fnHandler, false);
?? 與 [Obejct].onclick = fnHandler; 的作用是一樣的。
??
? -
對(duì)于獲取目標(biāo)的方法
? 在 IE 中
??var oTarget = oEvent.srcElement;
? 在 DOM 中
??var oTarget = oEvent.target;
??
?? -
對(duì)于獲取字符代碼
????在 IE 中
????? 如果按鍵代表一個(gè)字符(非 Shift 、 Ctrl 、 Alt 等),則 keyCode 將返回字符的代碼,即 Unicode 值。
在
DOM
中
??
???
??????
獲得字符代碼用
charCode?
var iCharCode = oEvent.charCode;
??
???
??????
獲得字符使用
??
?var sChar = String.fromCharCode(oEvent.charCode);
??
??????????
如果不確定按鍵是否包含字符,則使用
isChar
來(lái)判斷
???if(oEvent.isChar){
????var iCharCode = oEvent.charCode;
???}
?
?
-
阻止事件的默認(rèn)行為 ( 比如阻止鼠標(biāo)右鍵等 )
? 在 IE 中
??oEvent.returnValue = false;
? 在 DOM 中
??oEvent.preventDefault();
?
? -
停止事件冒泡
? 在 IE 中
??oEvent.cancelBubble = true;
? 在 DOM 中
??oEvent.stopPropagation();
IE 和 DOM 在事件及事件處理中有很多不一樣的。
把
IE
的
Event
事件統(tǒng)一成
DOM
的形式,創(chuàng)建
formatEvent
方法。建立
EventUtil
類
?
?
EventUtil.formatEvent = function (oEvent){ if(isIE){ oEvent.charCode = (oEvent.type == "keypress") ? oEvent.keyCode : 0; oEvent.eventPhase = 2; //代表冒泡階段,IE僅支持冒泡階段 oEvent.isChar = (oEvent.charCode > 0); oEvent.pageX = oEvent.clientX + document.body.scrollLeft; oEvent.pageY = oEvent.clientY + document.body.scrollTop; oEvent.preventDefault = function (){ this.returnvalue = false; } if(oEvent.type == "mouseout"){ oEvent.relatedTarget = oEvent.toElement; }else if(oEvent.type == "mouseover"){ oEvent.relatedTarget = oEvent.fromElement; } oEvent.stopPropagation = function (){ this.cancelBubble = true; } oEvent.target = oEvent.srcElement; oEvent.time = (new Date).getTime(); } return oEvent; }
?
?IE
與
DOM
的
event
獲取方法也不大一樣。特別說(shuō)明的是函數(shù)的
caller
屬性。每個(gè)函數(shù)都有
caller
屬性,指向調(diào)用它的方法的引用。即,
funcA()
調(diào)用
funcB(),funcB.caller
就等于
funcA
?
EventUtil.getEvent = function(){ if(window.event){ return this.formatEvent(window.event); }else{ return EventUtil.getEvent.caller.arguments[0];//event對(duì)象總是事件處理函數(shù)的第一個(gè)參數(shù)。 } }
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
