當我們想去操作html文檔中的某個元素,使其發生某種變化時,這都少不了事件綁定。
今天主要想寫一下最基本的一些用法和注意點。
第一,事件綁定
(1)在元素的標簽中,使用 on+事件名的方法。此種方法簡單,也不存在什么兼容問題,但是沒有實現代碼分離,且只能綁定一個函數。
(2)第二種方法與第一種方法類似,只是事件綁定放到了js中。這實現了代碼分離,也很簡單。但是功能較弱,也只能實現一個函數的綁定。
(3)添加事件監聽
這種方法,addEventListener可以同時綁定多個函數,在W3C標準下,為先綁定先執行。此外,此方法還有其它優點,可以在第三個參數下,指定是在事件冒泡時執行,還是事件捕捉時執行。此外,第二個參數,如果我們直接寫一個函數,在函數中傳入事件(e),我們可以直接捕捉到觸發事件。最后還有一個注意點,就是函數體中的this,是添加事件監聽前的元素。
這種方法優點這么多,所以我們自然優先選擇這種方法,但是要注意,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)
這里有較為詳細一些的,關于jQuery中的事件綁定 http://www.51edu.com/it/bckf/35687.html
第三,事件冒泡,事件捕獲以及應用。
1)冒泡事件
冒泡事件如其名字,是從一個具體的元素的事件的觸發,逐漸擴散到最不具體的事件目標(document)。我們最常用的一個應用,就是如果多個元素需要觸發相同事件,或者動態添加某些元素導致無法綁定事件時,可以將事件觸發綁定到父元素上,這樣在子元素上的事件也會使父元素觸發相應函數,這就叫做事件委托。
2)事件捕獲
定義與事件冒泡相反,就是從最不具體的事件逐級捕獲到最具體的事件。
3) 事件流
DOM事件流:同時支持兩種事件模型:捕獲型事件和冒泡型事件,但是,捕獲型事件先發生。兩種事件流會觸及DOM中的所有對象,從document對象開始,也在document對象結束。在addEventListener中,將第三個參數設置為false,則是在冒泡事件中執行。這與IE默認的事件模型一致。
參考文章:
事件綁定:
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