在查看或學習一些舊的jquery文章及代碼時(歷史有點遠-),經常會看到綁定事件出現bind(), live(), delegate等,造成一些困惑。jq1.7版本以后,為統一和效能,用on()替代bind(), live(), delegate。
如果您 還有興趣,可以再了解下:
-
bind(type,[data],fn) 為每個匹配元素的特定事件繫結事件處理函式
$(“a”).bind(“click”,function(){alert(“ok”);}); -
live(type,[data],fn) 給所有匹配的元素附加一個事件處理函式,即使這個元素是以後再新增進來的
$(“a”).live(“click”,function(){alert(“ok”);}); -
delegate(selector,[type],[data],fn) 指定的元素(屬於被選元素的子元素)新增一個或多個事件處理程式,並規定當這些事件發生時執行的函式
$(“#container”).delegate(“a”,”click”,function(){alert(“ok”);}) -
on(events,[selector],[data],fn) 在選擇元素上繫結一個或多個事件的事件處理函式
最大的差別:bind()的事件函式只能針對已經存在的元素進行事件的設定。如果你想對動態建立的元素bind()事件,是沒有辦法達到效果的,但是live(),on(),delegate()均支援未來新新增元素的事件設定。
.bind()是直接繫結在元素上()
jquery1.7版本以前比較受推崇,1.7版本出來之後,官方已經不推薦用bind(),替代函式為on(),這也是1.7版本新新增的函式,同樣,可以用來代替live()函式,live()函式在1.9版本已經刪除;
.delegate()則是更精確的小範圍使用事件代理,效能優於.live()(在Jquery1.7中已經移除)
.live()則是通過冒泡的方式來繫結到元素上的。更適合列表型別的,繫結到document
DOM節點上。和.bind()的優勢是支援動態資料。(在Jquery1.7中已經移除,相應die()也移除)
live()函式和delegate()函式兩者類似,但是live()函式在執行速度,靈活性和CSS選擇器支援方面較delegate()差些
.on()則是最新的1.9版本整合了之前的三種方式的新事件繫結機制(在Jquery1.7中新增,相應off()也新增)
jquery1.4 及之前的版本,由.click() 或 bind()方法繫結的事件,不能適用指令碼建立的新元素:即是說頁面載入完成後,再動態建立的DOM元素並不能響應之前繫結的事件!
舊版本的處理方法是使用.live()方法來代替事件繫結.bind(),使得繫結的事件能適用指令碼建立的新元素。
但自jq1.7版本開始,官方已明文表示不再推薦使用使用.live()方法,官方解釋為:live()呼叫過程首先將事件方法繫結到了Document,然後,查詢Document裡是否有匹配元素。
這個過程對於效能來說可能比較浪費。官方推薦將.live()改成Delegate()方法,適用指令碼建立的新元素。
jq1.8開始,官方又再次申明:如果你開發最新版本的jQuery,完全可以使用on()方法來處理所有的事件繫結,避免過多的方法呼叫,因為其實在最新版本的jQuery類庫中,所有以上舊版方法在後面其實都是呼叫on()方法。