DOM基礎(chǔ)教程之事件對(duì)象
瀏覽器中的事件都是以對(duì)象的形式存在的,同樣ie瀏覽器與標(biāo)準(zhǔn)dom瀏覽器之間存在獲取事件對(duì)象上也存在差別。在ie瀏覽器中事件對(duì)象是windows對(duì)象的一個(gè)屬性event,訪問通常采用如下方法。
oP.onclick = function(){
var oEvent = window.event;
}
盡管它是window對(duì)象屬性,但event對(duì)象還是只能在事件發(fā)生時(shí)被訪問,所有的事件處理函數(shù)執(zhí)行完之后,該對(duì)象就消失了。
而標(biāo)準(zhǔn)的dom規(guī)定event對(duì)象必須作為唯一的參數(shù)傳給事件處理函數(shù)。一次在類似火狐瀏覽器中訪問事件對(duì)象通常作為參數(shù),代碼如下:
oP.onclick = function(oEvent){
}
因此,為了兼容兩種瀏覽器,通常采用下面的方法
oP.onclick = function(oEvent){
if(window.event)oEvent = window.event;
}
瀏覽器在獲取了事件的對(duì)象后就可以通過它的一系列屬性和方法處理各種事件了,例如鼠標(biāo)事件,鍵盤事件和瀏覽器事件。等
以下羅列了常用的屬性和方法:

從以上可以看出,兩類瀏覽器還是有一些相似之處,例如type屬性便是各種瀏覽器所兼容的,它表示獲取事件的類型,返回類似“click”,“mousemove”之類的值。
這對(duì)于同一個(gè)函數(shù)處理多個(gè)種類事件十分有用。
如下:同一個(gè)函數(shù) 處理多種事件。
<script language="javascript">
function handle(oEvent) {
var disp = document.getElementById("display");
if (window.event) oEvent = window.event; //處理兼容性,獲得對(duì)象
if (oEvent.type == "click")
disp.innerHTML += "你點(diǎn)擊了我!";
else if (oEvent.type == "mouseover")
disp.innerHTML += "你移動(dòng)到我的上面";
}
window.onload = function() {
var oP = document.getElementById("box");
oP.onclick = handle;
oP.onmouseover = handle;
}
</script>
<div>
<div id="box" style="width:100px;height:100px;background:#ddd;"></div>
<p id="display">Click Me</p>
</div>
以上代碼給id="box"的div添加了兩個(gè)事件響應(yīng)函數(shù),而這兩個(gè)事件卻是同一個(gè)函數(shù)
在這函數(shù)中首先考慮兼容獲得事件對(duì)象,然后利用type屬性盤對(duì)事件的名稱。
在檢測(cè)shift、alt、ctrl這三個(gè)按鍵時(shí),兩類瀏覽器使用的方法也完全一樣,都具有 shiftKey,altKey,ctrlKey這三個(gè)屬性,
代碼如下:
var bShift = oEvent.shiftKey;
var bAlt = oEvent.altKey;
var bCtrl = oEvent.ctrlKey;
另外,在獲取鼠標(biāo)指針上,兩類瀏覽器使用的方法都一樣,都具有clientX、clientY和screenX、screenY。
其中,clientX和clientY表示鼠標(biāo)在客戶端區(qū)域的位置,不包括瀏覽器的狀態(tài)欄,菜單欄等。
代碼如下:
var iClientX = oEvent.clientX;
var iClientY = oEvent.clientY;
而screenX和sreenY則指的是鼠標(biāo)在整個(gè)計(jì)算機(jī)屏幕的位置,代碼是
var iScreenX = oEvent.screenX;
var iScreenY = oEvent.screenY;
很多時(shí)候,開發(fā)者想知道事件是由那個(gè)對(duì)象觸發(fā)的,即事件的目標(biāo)(target)。
假設(shè)<p>元素分配onclick事件處理函數(shù),觸發(fā)click事件時(shí)<p>就會(huì)被認(rèn)為是目標(biāo)。
在IE瀏覽器中,目標(biāo)包含在event對(duì)象的srcElement屬性中,代碼如下
而在標(biāo)準(zhǔn)的DOM瀏覽器中,目標(biāo)則包含在target屬性中,代碼如下
獲取事件的目標(biāo)
<script language="javascript">
function handle(oEvent) {
var disp = document.getElementById("display");
if (window.event) oEvent = window.event; //處理兼容性,獲得對(duì)象
var oTarget;
if (oEvent.srcElement) //處理兼容性,獲得事件
oTarget = oEvent.srcElement;
else
oTarget = oEvent.target;
disp.innerHTML += "元素名稱:" + oTarget.tagName +"<br>" + "元素內(nèi)容:" + oTarget.textContent + "<br>"
+ "之前緊隨的節(jié)點(diǎn):" + oTarget.textContent + "<br>"
;
}
window.onload = function() {
var oP = document.getElementById("box");
oP.onclick = handle;
}
</script>
<div>
<div id="box" style="width:100px;height:100px;background:#ddd;">
box內(nèi)容
</div>
<p id="display"></p>
</div>
(補(bǔ)充)Element 對(duì)象的屬性 http://www.w3school.com.cn/xmldom/dom_element.asp
(補(bǔ)充)Element 對(duì)象的方法 http://www.w3school.com.cn/xmldom/dom_element.asp
由于事件的目標(biāo)在兩類瀏覽器上不同,因此代碼必須保證兼容性,通常的做法就是直接將對(duì)象作為if語句的條件,代碼如下
if (oEvent.srcElement)
oTarget = oEvent.srcElement;
else
oTarget = oEvent.target;
這種方法在其它屬性中也是常用的。
- html的DOM中Event對(duì)象onblur事件用法實(shí)例
- DOM基礎(chǔ)教程之事件類型
- jQuery 處理頁面的事件詳解
- DOM 事件流詳解
- DOM 中的事件處理介紹
- jquery中dom操作和事件的實(shí)例學(xué)習(xí) 下拉框應(yīng)用
- jquery中dom操作和事件的實(shí)例學(xué)習(xí) 仿yahoo郵箱登錄框的提示效果
- jquery中dom操作和事件的實(shí)例學(xué)習(xí)-表單驗(yàn)證
- DOM3中的js textInput文本事件
- jQuery 選擇器、DOM操作、事件、動(dòng)畫
- html的DOM中Event對(duì)象onabort事件用法實(shí)例
相關(guān)文章
JavaScript基礎(chǔ)之立即執(zhí)行函數(shù)
這篇文章主要介紹了如何理解JavaScript中的立即執(zhí)行函數(shù),幫助大家更好的學(xué)習(xí)JavaScript,感興趣的朋友可以了解下2021-11-11
JavaScript高級(jí)程序設(shè)計(jì)(第3版)學(xué)習(xí)筆記13 ECMAScript5新特性
通常而言,JavaScript由ECMAScript核心、BOM和DOM三部分構(gòu)成,前面的文章將ECMAScript核心部分粗略的過了一篇2012-10-10
Javascript學(xué)習(xí)筆記4 Eval函數(shù)
在初學(xué)JS的時(shí)候就知道這個(gè)函數(shù),卻一直沒有了解過他的用途,也一直都是睜一只眼閉一只眼,這次來深入地了解一下這個(gè)函數(shù)的作用。2010-01-01
JavaScript對(duì)象創(chuàng)建及繼承原理實(shí)例解剖
本文將用實(shí)例講解一下JavaScript對(duì)象創(chuàng)建及繼承原理:JavaScript中的繼承是使用原型鏈的機(jī)制,對(duì)象創(chuàng)建使用Function構(gòu)造器,感興趣的朋友可以詳細(xì)了解下本文,或許可以幫助到你2013-02-02
Javascript代碼在頁面加載時(shí)的執(zhí)行順序介紹
Javascript代碼在頁面加載時(shí)的執(zhí)行順序介紹,需要的朋友可以參考一下2013-05-05
window.location.reload 刷新使用分析(去對(duì)話框)
這篇文章主要介紹了window.location.reload 刷新使用分析(去對(duì)話框),需要的朋友可以參考下2015-11-11
javascript實(shí)現(xiàn)用戶必須勾選協(xié)議實(shí)例講解
這篇文章主要介紹了javascript實(shí)現(xiàn)用戶必須勾選協(xié)議實(shí)例講解,寫頁面的時(shí)候經(jīng)常會(huì)用到,有感興趣的同學(xué)可以學(xué)習(xí)下2021-03-03

