jquery .on()替代bind(), live(), delegate()

在查看或學習一些舊的jquery文章及代碼時(歷史有點遠-),經常會看到綁定事件出現bind(), live(), delegate等,造成一些困惑。jq1.7版本以后,為統一和效能,用on()替代bind(), live(), delegate。

如果您 還有興趣,可以再了解下:

  1. bind(type,[data],fn) 為每個匹配元素的特定事件繫結事件處理函式
    $(“a”).bind(“click”,function(){alert(“ok”);});

  2. live(type,[data],fn) 給所有匹配的元素附加一個事件處理函式,即使這個元素是以後再新增進來的
    $(“a”).live(“click”,function(){alert(“ok”);});

  3. delegate(selector,[type],[data],fn) 指定的元素(屬於被選元素的子元素)新增一個或多個事件處理程式,並規定當這些事件發生時執行的函式
    $(“#container”).delegate(“a”,”click”,function(){alert(“ok”);})

  4. 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()方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值