當咱們試圖綁定一些事件到DOM元素上的時候,一般會使用如下的四個方法bind(),on(),live(),delegate()
你們應該用的較多的是前兩種方法。下面是我對四種方法的理解:html
$( "#members li a" ).bind( "click", function( e ) {} ); $( "#members li a" ).click( function( e ) {} );
上面的兩行代碼完成的任務都是同樣的,就是把event handler 加到所有匹配的a元素上。這裏存在着一些效率方面的問題,一方面,咱們隠式地吧點擊事件加到了全部的a標籤上,這個過程是昂貴的;另外一方面在執行的時候也是一種浪費,由於他們都是作了同一件事卻執行了不少次(咱們能夠把它們hook到它們的父元素,經過冒泡能夠對它們中的每個進行區分,而後在執行這個event handle)。
優勢jquery
缺點瀏覽器
.live()
.live()方法用到了事件委託的概念來處理事件的綁定。它和用.bind()來綁定事件是同樣的。.live()方法會綁定相應的事件到你所選擇的元素的根元素上,便是document元素上。那麼全部經過冒泡上來的事件均可以用這個相同的handler來處理了。它的處理機制是這樣的,一旦事件冒泡到document上,jQuery將會查找selector/event metadata,而後決定那個handler應該被調用。不過在最新的jquery版本中好像被刪掉了。函數
$( "#members li a" ).live( "click", function( e ) {} );
優勢:code
缺點:orm
.Delegate()
.delegate()有點像.live(),不一樣於.live()的地方在於,它不會把全部的event所有綁定到document,而是由你決定把它放在哪兒。而和.live()相同的地方在於都是用event delegation.推薦使用.delegate() 代替.live()htm
$( "#members" ).delegate( "li a", "click", function( e ) {} );
優勢:blog
缺點:事件
.On()
其實.bind(), .live(), .delegate()都是經過.on()來實現的,.unbind(), .die(), .undelegate(),也是同樣的都是經過.off()來實現的,這是1.8.2的源碼:get
$( "#members li a" ).on( "click", function( e ) {} ); $( "#members li a" ).bind( "click", function( e ) {} ); // Live $( document ).on( "click", "#members li a", function( e ) {} ); $( "#members li a" ).live( "click", function( e ) {} ); // Delegate $( "#members" ).on( "click", "li a", function( e ) {} ); $( "#members" ).delegate( "li a", "click", function( e ) {} );
優勢:
缺點:
結論:
參考資料:https://www.cnblogs.com/moonr...
http://www.alfajango.com/blog...