一直在使用event.code來判斷按鍵,可是對於event對象還有很多屬性和兼容性的問題沒怎么了解,今天好好看了一下。
一、event對象是什么
在很多情況,我們需要使用js的這個event對象,那么今天我就給大家說說event是什么東西
我們知道,js里有很多事件,比如onclick等。這些事件之所以可以稱之為事件,不僅僅是因為他們可以有執行某種動作的能力,還有事件的一些狀態屬性,比如這個事件的返回值是什么等等,或者你可以理解為java里的反射Class,用來描述這些時間狀態的對象,就是今天我們要講的event對象。
二、如何獲取event
有時候我們需要用到event,比如最常用到的便是阻止事件的冒泡行為。那么最起碼我們得先知道怎么獲取這個event對象吧。
firefox里的event跟IE里的不同,IE里的是全局變量,隨時可用;firefox里的要用參數引導才能用,是運行時的臨時變量。
在IE/Opera中是window.event,在Firefox中是event;
<script type="text/javascript"> function doSomething (obj,evt) { var e=(evt)?evt:window.event; //判斷瀏覽器的類型,在基於ie內核的瀏覽器中的使用cancelBubble } </script>
也就是FF系列的必須要傳進來,比如在頁面中調用這個方法的時候,需要另外傳進event來,而IE是全局變量,無需傳進來。
<div id="child2" onclick="doSomething(this,event);">
那么用jquery的時候,應該如何來獲取event呢?
$("#inputId").bind("click",function(event){
p=i;
alert(p+"=="+event.target);
});
利用jquery,不論在IE上還是FF上,都沒有必要必須”從頁面上進行傳進來了“。
三、event對象有哪些屬性或者方法
1、type。事件類型。用來描述這個事件是什么類型的,比如onclick的事件類型為click。
2、srcElement/target:事件源,就是發生事件的元素; FF下是target,IE下是srcElement
比如我要打印下面這句話執行這個方法時候的目標事件源:
<div id="child2" onclick="doSomething(this,event);"> <p>This is child2. Will bubble.</p> </div>
會彈出:
我就很納悶,我明明是將這個click時間綁定在了div上了,為何給告訴我事件源是P標簽呢?下面我們再來做一個小eg,將上面的html換成:
<div id="child2" onclick="doSomething(this,event);" > aaaaaaaaaa </div>
那么現在彈出的結果是
這時候說明我是DIV。原來何為事件源?就是你出發事件的那個元素,並不是你綁定在哪個元素上那個tag。
3、cancelBubble:一個布爾屬性,把它設置為true的時候,將停止事件進一步起泡到包容層次的元素;(e.cancelBubble = true; 相當於 e.stopPropagation();) 。FF下是后者。
這個地方非常有用。在下一篇文章中我們專門來講解這個問題。
4、returnValue:一個布爾屬性,設置為false的時候可以組織瀏覽器執行默認的事件動作;(e.returnValue = false; 相當於 e.preventDefault();)
5、attachEvent(),detachEvent()/addEventListener(),removeEventListener:為制定DOM對象事件類型注冊多個事件處理函數的方法,它們有兩個參數,第一個是事件類型,第二個是事件處理函數。在 attachEvent()事件執行的時候,this關鍵字指向的是window對象,而不是發生事件的那個元素;
6、keyCode。這個不陌生了吧。也非常的常用,用來判斷你按下了哪個鍵
這系列的方法相當有效,動態的綁定、解綁定tag的各種事件,日后我們會講解。
當然還有其他的一些屬性,我這里列出來的都是最常用的。比如還有,button、 clientX/clientY、offsetX,offsetY/layerX,layerY、x,y/pageX,pageY、altKey,ctrlKey,shiftKey、fromElement,toElement、screenX、screenY。
文章轉自:http://www.esnsc.com/news632.html