亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

jQuery事件綁定on()、bind()與delegate() 方法詳解

2019-11-20 12:22:31
字體:
來源:轉載
供稿:網友

啃了一段日子的js相關了,學的過程中發現在jQuery中綁定事件時,有人用bind(),有人用on(),有人用delegate(),還有人用live(),看代碼的時候覺得都實現功能了也就掀過去了,只是一直沒完全弄懂之間的區別,于是今天查了下資料,自己做個總結。

之所以有這么多類型的綁定方法,是因為jQuery的版本更新的原因,如on()方法就是1.7以后出現的。

jQuery的事件綁定api頁面上,提到live()方法已經過時,不建議使用。所以這里我們主要就看下以下三個方法:bind()、delegate()、on()

我們準備一個html頁面,用于各種類型事件綁定的測試。

<html><head lang="en"><meta charset="UTF-8"><title></title><script src="http://libs.baidu.com/jquery/1.10.2/jquery.min.js"></script></head><body><div>  <button id="btn">添加新的p元素</button>  <p>第一個p元素</p>  <p>第二個p元素</p>  <p>第三個p元素</p>  <p>第四個p元素</p>  <p>第五個p元素</p></div><script>$("#btn").click(function(){  $("div").append("<p>這是一個新的p元素</p>");});</script></body></html>

一個簡單的頁面,放置了一個div,div里面若干個p元素和一個按鈕,點擊按鈕可以追加p元素。我們下面將對頁面上的p元素綁定click事件。

bind()

用法

復制代碼 代碼如下:

$("div p").bind("click", function () {
    alert($(this).text());
})

這樣就為所有div里的p元素都綁定了click事件,響應為彈出其內容。綁定很簡單快捷,但是這里有兩個問題:
第一個問題,這里用了隱式迭代的方法,如果匹配到的元素特別多的時候,比如如果我在div里放了50個p元素,就得執行綁定50次。對于大量元素來說,影響到了性能。
但是如果是id選擇器,因為id唯一,用bind()方法就很快捷了。
第二個問題,對于尚未存在的元素,無法綁定。點擊頁面上的按鈕,將動態添加一個p元素,點擊這個p元素,會發現沒有動作響應。
用delegate方法就可以解決這兩個問題了。

另外提一下,bind()方法還有一種簡寫方式,上面的代碼還可以換成:

復制代碼 代碼如下:

$("div p").click(function () {
    alert($(this).text());
})

delegate()

用法

復制代碼 代碼如下:

$("div").delegate("p", "click", function () {
    alert($(this).text());
});

這種方式采用了事件委托的概念。不是直接為p元素綁定事件,而是為其父元素(或祖先元素也可)綁定事件,當在div內任意元素上點擊時,事件會一層層從event target向上冒泡,直至到達你為其綁定事件的元素,如此例中的div元素。冒泡的過程中,如果事件的currentTarget與選擇器匹配時,就會執行代碼。

這樣就解決了用bind()方法的上面兩個問題,不用再一個個地去為p元素綁定事件,也可以為動態添加進來的p元素綁定。甚至,如果你將事件綁定到document上,都不用等document準備好就可執行綁定。

這樣,綁定是容易了,但是調用的時候也可能出現問題。如果事件目標在DOM樹中很深的位置,這樣一層層冒泡上來查找與選擇器匹配的元素,又影響到性能了。

on()

on()其實是將以前的綁定事件方法作了統一,查看jQuery無壓縮的源碼(我這里看的版本是1.11.3),可以發現無論bind()還是delegate()其實都是通過on()方法實現的,只是參數不同罷了。

復制代碼 代碼如下:
 
 bind: function( types, data, fn ) {
     return this.on( types, null, data, fn );
    },
    unbind: function( types, fn ) {
     return this.off( types, null, fn );
    },
    delegate: function( selector, types, data, fn ) {
     return this.on( types, selector, data, fn );
    }
    undelegate: function( selector, types, fn ) {
 // ( namespace ) or ( selector, types [, fn] )
     return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
    }

上面的例子中,用on()可以作如下綁定:

復制代碼 代碼如下:

$("div").on("click","p",function(){
    alert($(this).text());
})

官方文檔建議:


As of jQuery 1.7, the .on() method is the preferred method for attaching event handlers to a document.

盡量使用on()來綁定事件。

移除事件

對應于bind()、delegate()和on()綁定方法,其移除事件的方法分別為:

復制代碼 代碼如下:

$( "div p" ).unbind( "click", handler );
$( "div" ).undelegate( "p", "click", handler );
$( "div" ).off( "click", "p", handler );

除了像上面這樣移除指定的事件綁定之外,還可以不傳入參數,移除所有事件綁定,這里就不一一列出了,jQuery的官方文檔寫得非常詳細。

總結

1.選擇器匹配到的元素比較多時,不要用bind()迭代綁定

2.用id選擇器時,可以用bind()

3.需要給動態添加的元素綁定時,用delegate()或者on()

4.用delegate()和on()方法,dom樹不要太深

5.盡量使用on()

以上所述就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
高潮白浆女日韩av免费看| 日韩中文字幕免费看| 成人精品久久久| 欧美亚洲日本黄色| 欧美极品少妇xxxxⅹ免费视频| 亚洲成人激情图| 久久大大胆人体| 2018日韩中文字幕| 国产精品久久久久高潮| 国产成+人+综合+亚洲欧洲| 国产精品视频1区| 久久人人爽亚洲精品天堂| 国内精品一区二区三区| 国内精品久久久久久久久| 精品国内产的精品视频在线观看| 欧美性猛交xxxx富婆弯腰| 成人免费网站在线| 国产一区二区香蕉| 欧美在线观看www| 精品伊人久久97| 国产成人亚洲综合青青| 国产成人中文字幕| 亚洲精品aⅴ中文字幕乱码| 中文字幕不卡在线视频极品| 欧美成aaa人片免费看| 成人a级免费视频| 免费97视频在线精品国自产拍| 国内精品久久久久久影视8| 青草成人免费视频| 亚洲欧美中文日韩v在线观看| 国产精品久久色| 国产精品视频在线观看| 欧美日韩免费观看中文| 亚洲天堂av在线免费观看| 久久久久久久久久久免费| 欧美视频一区二区三区…| 91av免费观看91av精品在线| 国产99久久精品一区二区永久免费| 大量国产精品视频| 国产成人精品综合| 性金发美女69hd大尺寸| 福利视频导航一区| 在线播放国产一区二区三区| 日韩黄在线观看| 在线看日韩av| 国产精品美女呻吟| 欧美专区在线观看| 精品久久久久久久久久久久久久| 国内精品久久久久影院优| 成人在线小视频| 国产欧美va欧美va香蕉在| 国产精品久久久久一区二区| 欧美成人第一页| 亚洲欧洲国产精品| 国产精品视频26uuu| 45www国产精品网站| 亚洲最大成人在线| 国产精品18久久久久久首页狼| 日韩电影中文 亚洲精品乱码| 欧美日韩亚洲视频一区| 尤物tv国产一区| 亚洲一区二区三区四区在线播放| 久久久爽爽爽美女图片| 国产伊人精品在线| 国产成人综合久久| 国产精品都在这里| 欧美大荫蒂xxx| 久久久免费高清电视剧观看| 96pao国产成视频永久免费| 日韩在线观看成人| 中文字幕欧美精品日韩中文字幕| 色老头一区二区三区| 8050国产精品久久久久久| 久久精品视频亚洲| 国产精品稀缺呦系列在线| 日韩精品视频中文在线观看| 韩国美女主播一区| 精品亚洲一区二区三区四区五区| 91在线色戒在线| 日韩电影大片中文字幕| 久久久久久久999| 亚洲精品国产精品乱码不99按摩| 成人免费午夜电影| 亚洲第一网中文字幕| 久久精品国产亚洲7777| 色综合久久88色综合天天看泰| 日韩中文字幕在线播放| 亚洲欧美日韩一区在线| www.美女亚洲精品| 国产精品视频导航| 在线精品高清中文字幕| 久久国产精品久久国产精品| 久久久精品欧美| 国产精品看片资源| 亚洲新中文字幕| 欧美激情乱人伦一区| 亚洲色图校园春色| 97高清免费视频| 日韩视频在线免费观看| 国产九九精品视频| 日韩国产精品视频| 欧美性xxxx极品hd满灌| 久久精品国产69国产精品亚洲| 亚洲欧美激情精品一区二区| 国产精品爽爽ⅴa在线观看| 亚洲第一国产精品| 久久99热这里只有精品国产| 国产精品观看在线亚洲人成网| 成人黄色在线播放| 国产精品一区二区三| 欧美专区日韩视频| 亚洲天堂免费观看| 亚洲美女www午夜| 久久av在线看| 欧美在线观看一区二区三区| 亚洲男人天堂网站| 亚洲人午夜精品| 日韩成人av网址| 视频一区视频二区国产精品| www.久久撸.com| 成人激情春色网| 中文字幕免费国产精品| 亚洲精品视频在线播放| 亚洲欧洲第一视频| 日韩电影中文字幕av| 性欧美办公室18xxxxhd| 69av在线视频| 亚洲欧洲偷拍精品| 久久久在线观看| 隔壁老王国产在线精品| 成人亚洲综合色就1024| 91精品视频专区| 欧美亚洲在线播放| 亚洲精品videossex少妇| 欧美成人在线影院| 欧美激情精品久久久久久| 欧美日韩视频在线| 国产中文欧美精品| 久久99亚洲热视| 久久精品国产亚洲7777| 亚洲国产成人久久| 亚洲精品99久久久久中文字幕| 久久精品91久久香蕉加勒比| 久久久亚洲影院你懂的| 久久国产精品免费视频| 久久久综合免费视频| 亚洲国产精品99| 日韩电影中文字幕| 51视频国产精品一区二区| 亚洲精品v欧美精品v日韩精品| 亚洲日本成人女熟在线观看| 久久国产一区二区三区| 亚洲色图15p| 欧美日韩午夜激情| 欧美激情精品久久久久久蜜臀| 91免费人成网站在线观看18| 成人综合网网址| 国产亚洲精品一区二555| 最近2019年中文视频免费在线观看| 欧美国产高跟鞋裸体秀xxxhd| 97精品一区二区三区| 最近2019免费中文字幕视频三| 国产成人在线亚洲欧美| 成人日韩av在线|