[jQuery].bind()與.live()之差異

最近看MSDN某教學影片使用到.bind()撰寫事件處理,想到最近撰寫MVC也是大量用到jQuery,對於常用到的.live()有點傻傻分不清楚,寫個小範例測試一下。

閱讀二者之使用說明,皆有( eventType, eventData, handler )模式可傳data,傳值的意義不在本文討論範圍,以下範例僅指定要處理的事件名稱(eventType)以及處理器(handler)


*範例效果—click DIV元素後會alert其text
情境1:.bind()寫在body
.bind()寫在body後
執行結果-DIV之click事件抓取text並alert

情境2:.bind()寫在body
.bind()寫在body前
執行結果-DIV之click事件沒反應

情境3 & 4:.live()寫在body or
.live()寫在body前
.live()寫在body後
執行結果-無論前後都可觸發click

依前述寥寥數圖可知.live()是對document所有elements作用,.bind()只對bind方法之前出現的element作用,此差異之說明文字引用官方網站如下
This method(此處只live方法) is a variation on the basic .bind() method for attaching event handlers to elements. When .bind() is called, the elements that the jQuery object refers to get the handler attached; elements that get introduced later do not, so they would require another .bind() call. 

那麼這種差別有啥用處?重點在動態!!
有時候網頁元素是透過程式碼動態新增,並非一開始就設計好放在body等著被bind方法委派要使用的hanlder,此時live把元素通通抓起來的特性就派上用場,管你元素是何時生成,只要DIV被click一律都會alert(以前述範例而言)。


參考網址http://api.jquery.com/live/

沒有留言: