事件是腳本語言的核心。本文將為大家介紹JQuery支持的一些事件和如何自定義事件
1)ready函數(shù)的位置:如果腳本依賴于CSS屬性,則需要在引入css文件之后引入腳本文件,如果腳本依賴于某個資源,則需要用load事件。
2)<body onload="">屬性和JQuery的ready,load事件沖突,不要一起使用。
1)最好不要對同一元素同時添加click和dblclick事件的響應(yīng)函數(shù),因為對這兩個事件的區(qū)分會造成一定的困擾
3)hover是mouseenter,mouseleave的組合。
1)鍵盤事件只發(fā)送給當(dāng)前的焦點元素,因為form常常能夠得到焦點,所以我們常把事件綁定到form上,如果想實現(xiàn)快捷鍵,可以將事件綁定到document上。
2)當(dāng)輸入文本時適合用keypress,當(dāng)快捷鍵時適合用keydown,keyup.
2)對選擇框等元素,只要用戶做出選擇就會觸發(fā)change事件,而對<textarea>等元素,當(dāng)元素失去焦點時才有可能觸發(fā)change事件。
resize:瀏覽器窗口的resize事件,一次resize窗口的動作可能會引發(fā)多個resize事件。
scroll:瀏覽器窗口,可滾動的frame,有scroll屬性的元素都能產(chǎn)生scroll事件
有的觸發(fā)事件的函數(shù)如select甚至能產(chǎn)生select行為,調(diào)用.select()能選中當(dāng)前元素里的所有文本。
在事件處理函數(shù)中,可以用帶參數(shù)的函數(shù)形式來獲取event中的數(shù)據(jù),可以用$(this)來獲取觸發(fā)事件的對象。下面看一個簡單的例子
在上面的例子中我們用到了事件對象里的屬性,下面我們來簡單看一下事件對象有哪些屬性(部分個人認為重要的屬性,不全):
relatedTarget獲取相關(guān)對象,如對于mouseleave事件,相關(guān)對象是獲得mouseenter事件
注意:target,currentTarget,relatedTarget和this都是DOM元素,還需要要用$來轉(zhuǎn)化為JQuery能操作的對象,如
對于mousedown和mouseup事件來說,1代表左鍵,2代表中間鍵,3代表右鍵
data:數(shù)據(jù)傳入方式為.click( [eventData ], handler(eventObject) )
event.preventDefault();可以禁止消息的默認響應(yīng)行為。
event.stopImmediatePropagation();禁止之后的消息處理函數(shù)和冒泡過程,不禁止默認響應(yīng)行為。
event.stopPropagation();不禁止之后的消息處理函數(shù)和默認響應(yīng)行為,但是禁止冒泡過程。
下面三個函數(shù)分別判斷上面三個函數(shù)是否已經(jīng)執(zhí)行。
event.isDefaultPrevented()
event.isImmediatePropagationStopped()
event.isPropagationStopped()
在某些情況下,你可能需要定制你自己的事件,下面是JQuery官網(wǎng)給的一個簡單的示例:
JQuery提供了trigger和triggerHandler兩種觸發(fā)事件的函數(shù)。
.trigger會為其選擇器中所有的元素觸發(fā)事件,且事件會進行冒泡處理,但是不會引起事件的默認行為。
.triggerHandler只會為其選擇器中的第一個元素觸發(fā)事件,且事件不會進行冒泡處理,也不會引起事件的默認行為。
.on( events [, selector ] [, data ], handler(eventObject) )
.on( events [, selector ] [, data ] )
其中第二種形式的參數(shù)events可以是事件字符串和相應(yīng)處理函數(shù)的數(shù)組,個人不喜歡這種形式,覺得看著亂,不如多寫幾個on呢。
當(dāng)不提供selector時,為直接綁定模式,當(dāng)事件傳遞到被綁定的對象時,就會被觸發(fā)。
為什么需要有代理綁定模式呢?有兩個對代理綁定模式需求的情景:
a.因為進行事件綁定的時候,被綁定的對象必須已經(jīng)存在,所以對于那些會動態(tài)加入的元素,就可以用代理綁定模式,將事件綁定到其已經(jīng)存在的最接近的祖先節(jié)點上。
b.某父節(jié)點下有多個節(jié)點需要響應(yīng)同一個事件。這時使用代理綁定模式能提高效率。
2)off函數(shù)和on函數(shù)相對,也有兩種形式,且支持直接綁定和代理綁定兩種模式。
JQuery提供了根據(jù)事件名稱,空間,選擇器,和事件處理函數(shù)的組合條件來刪除事件綁定的各種便利方式。
3)one函數(shù),消息綁定只被觸發(fā)一次就會被移除。特別的是在代理綁定模式中,只要事件傳遞到被綁定的對象,不管是否被觸發(fā),都會移除消息綁定。