JavaScript event對象:當(dāng)前事件
獲取event對象
在 W3C 規(guī)范中,event 對象是隨事件處理函數(shù)傳入的,Chrome、FireFox、Opera、Safari、IE9.0及其以上版本都支持這種方式;但是對于 IE8.0 及其以下版本,event 對象必須作為 window 對象的一個屬性。
◆?在遵循 W3C 規(guī)范的瀏覽器中,event 對象通過事件處理函數(shù)的參數(shù)傳入。
語法:
elementObject.OnXXX=function(e){ var eve=e; // 聲明一個變量來接收 event 對象 }
上面綁定的事件處理函數(shù)中,參數(shù) e 用來傳入 event 對象,變量 eve 則表示當(dāng)前事件。這個過程是 JavaScript 自動完成的。
例如,要獲取發(fā)生事件時鼠標(biāo)的坐標(biāo),可以這樣寫:
<div id="demo">在這里單擊</div> <script type="text/javascript"> document.getElementById("demo").onclick=function(e){ var eve=e; var x=eve.x; // X坐標(biāo) var y=eve.y; // Y坐標(biāo) alert("X坐標(biāo):"+x+"\nY坐標(biāo):"+y); } </script>
請看下面的演示
◆?對于 IE8.0 及其以下版本,event 必須作為 window 對象的一個屬性。
語法:
elementObject.OnXXX=function(){ var eve=window.event; // 聲明一個變量來接收event對象 }
例如,要取得發(fā)生事件時鼠標(biāo)的坐標(biāo),可以這樣寫:
<div id="demo">在這里單擊</div> <script type="text/javascript"> document.getElementById("demo").onclick=function(){ var eve=window.event; var x=eve.x; // X坐標(biāo) var y=eve.y; // Y坐標(biāo) alert("X坐標(biāo):"+x+"\nY坐標(biāo):"+y); } </script>
請看下面的演示:
可以看出,要想獲取與當(dāng)前事件有關(guān)的狀態(tài),比如發(fā)生事件的DOM元素、鼠標(biāo)坐標(biāo)、鍵盤按鍵等,就要處理瀏覽器的兼容問題。
典型代碼:
elementObject.OnXXX=function(e){ var eve = e || window.event; // 使用 || 運算取得event對象 }
這里要注意一點, || 運算的返回值不一定是 Boolean 類型,當(dāng) || 運算的兩個操作數(shù)中有一個為真時,將返回該操作數(shù)本身的值。上面的代碼,如果 event 隨函數(shù)的參數(shù)傳入,e 為真,eve=e;如果作為 window 對象的屬性,window.event 為真,eve=window.event 。
改進上面獲取鼠標(biāo)坐標(biāo)的代碼,使它兼容所有瀏覽器:
<div id="demo">在這里單擊</div> <script type="text/javascript"> document.getElementById("demo").onclick=function(e){ var eve = e || window.event; var x=eve.x; var y=eve.y; alert("X坐標(biāo):"+x+"\nY坐標(biāo):"+y); } </script>
請看下面的演示:
event對象常用屬性和方法
event 對象用來表示當(dāng)前事件,事件有很多狀態(tài),例如,鼠標(biāo)單擊時的位置,按下鍵盤時的按鍵,發(fā)生事件的HTML元素,是否執(zhí)行默認(rèn)動作,是否冒泡等,這些都是作為event對象的屬性和方法存在的。要想獲得相應(yīng)的狀態(tài),就要訪問對應(yīng)的屬性和方法。
event 對象常用屬性和方法(W3C規(guī)范)
除了上面W3C規(guī)范所規(guī)定的屬性和方法外,IE瀏覽器還支持以下屬性。
event 對象的屬性(IE特有)