當(dāng)我們想去操作html文檔中的某個(gè)元素蹈垢,使其發(fā)生某種變化時(shí),這都少不了事件綁定袖裕。
今天主要想寫一下最基本的一些用法和注意點(diǎn)曹抬。
第一,事件綁定
(1)在元素的標(biāo)簽中急鳄,使用 on+事件名的方法谤民。此種方法簡單,也不存在什么兼容問題疾宏,但是沒有實(shí)現(xiàn)代碼分離张足,且只能綁定一個(gè)函數(shù)。
(2)第二種方法與第一種方法類似坎藐,只是事件綁定放到了js中为牍。這實(shí)現(xiàn)了代碼分離,也很簡單岩馍。但是功能較弱碉咆,也只能實(shí)現(xiàn)一個(gè)函數(shù)的綁定。
(3)添加事件監(jiān)聽
這種方法蛀恩,addEventListener可以同時(shí)綁定多個(gè)函數(shù)疫铜,在W3C標(biāo)準(zhǔn)下,為先綁定先執(zhí)行双谆。此外壳咕,此方法還有其它優(yōu)點(diǎn),可以在第三個(gè)參數(shù)下,指定是在事件冒泡時(shí)執(zhí)行佃乘,還是事件捕捉時(shí)執(zhí)行囱井。此外,第二個(gè)參數(shù)趣避,如果我們直接寫一個(gè)函數(shù),在函數(shù)中傳入事件(e),我們可以直接捕捉到觸發(fā)事件新翎。最后還有一個(gè)注意點(diǎn)程帕,就是函數(shù)體中的this,是添加事件監(jiān)聽前的元素。
這種方法優(yōu)點(diǎn)這么多地啰,所以我們自然優(yōu)先選擇這種方法愁拭,但是要注意,IE 不支持亏吝,要使用attachEvent.
第二 jQuery中的事件綁定
由于jQuery的使用頻度較高岭埠,這里簡略提一下jQuery中我們常用的事件綁定方法。
(1)$(選擇器).bind(事件類型,[data],function(){});?
(2) 可以將上述簡寫成惜论,$(選擇器).事件(function(){});?
eg. ?a.click(function(){ alert("a is clicked");});
(3)使用on.?
on(type,[selector],[data],fn)
這里有較為詳細(xì)一些的许赃,關(guān)于jQuery中的事件綁定 http://www.51edu.com/it/bckf/35687.html
第三,事件冒泡馆类,事件捕獲以及應(yīng)用混聊。
1)冒泡事件
冒泡事件如其名字,是從一個(gè)具體的元素的事件的觸發(fā)乾巧,逐漸擴(kuò)散到最不具體的事件目標(biāo)(document)句喜。我們最常用的一個(gè)應(yīng)用,就是如果多個(gè)元素需要觸發(fā)相同事件沟于,或者動(dòng)態(tài)添加某些元素導(dǎo)致無法綁定事件時(shí)咳胃,可以將事件觸發(fā)綁定到父元素上,這樣在子元素上的事件也會使父元素觸發(fā)相應(yīng)函數(shù)旷太,這就叫做事件委托展懈。
2)事件捕獲
定義與事件冒泡相反,就是從最不具體的事件逐級捕獲到最具體的事件泳秀。
3) 事件流
DOM事件流:同時(shí)支持兩種事件模型:捕獲型事件和冒泡型事件标沪,但是,捕獲型事件先發(fā)生嗜傅。兩種事件流會觸及DOM中的所有對象金句,從document對象開始,也在document對象結(jié)束吕嘀。在addEventListener中违寞,將第三個(gè)參數(shù)設(shè)置為false,則是在冒泡事件中執(zhí)行。這與IE默認(rèn)的事件模型一致偶房。
參考文章:
事件綁定:
http://www.cnblogs.com/ninofocus/archive/2012/11/07/2758772.html
http://www.itxueyuan.org/view/6338.html
冒泡及事件流:http://www.jb51.net/article/42492.htm