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

首頁 > 編程 > JavaScript > 正文

jquery live()重復綁定的解決方法介紹

2019-11-20 21:19:36
字體:
來源:轉載
供稿:網友

Query中.live()方法的使用方法

今天在寫代碼的時候遇到一個問題,直接上代碼看:
$(function(){
           $(".file").live("click",function(){
                    var task_name=$(this).text();
                    $("#selecting tbody").append("<trclass=gradeA'><tdclass='center'>"+task_name+"</td></tr>");     
           });  
    });

$(".file")對象是從后臺傳過來的,click肯定是不行的,bind()也無法獲取動態添加的元素,因此只能用live(),但是使用live()遇到的問題是表格行會莫名其妙的添加了兩行,即綁定事件重復執行了,糾結了一上午終于找到了原因,先看live()方法的介紹。

live(type, [data],fn)


概述

jQuery給所有匹配的元素附加一個事件處理函數,即使這個元素是以后再添加進來的也有效。

這個方法是基本是的 .bind() 方法的一個變體。使用 .bind()時,選擇器匹配的元素會附加一個事件處理函數,而以后再添加的元素則不會有。為此需要再使用一次 .bind() 才行。比如說

<body>
<div class="clickme">Clickhere</div>
<body>

可以給這個元素綁定一個簡單的click事件:

$('.clickme').bind('click', function() {        
alert("Bound handler called.");     
}); 

當點擊了元素,就會彈出一個警告框。

然后,想象一下這之后有另一個元素添加進來了。

$('body').append('<div class="clickme">Another target</div>');

盡管這個新的元素也能夠匹配選擇器".clickme" ,但是由于這個元素是在調用 .bind() 之后添加的,所以點擊這個元素不會有任何效果。

.live()就提供了對應這種情況的方法。如果我們是這樣綁定click事件的:

$('.clickme').live('click', function() {
alert("Live handler called.");      
});

然后再添加一個新元素:

$('body').append('<divclass="clickme">Anothertarget</div>');

然后再點擊新增的元素,他依然能夠觸發事件處理函數。 

事件委托

.live()方法能對一個還沒有添加進DOM的元素有效,是由于使用了事件委托:綁定在祖先元素上的事件處理函數可以對在后代上觸發的事件作出回應。

傳遞給 .live()的事件處理函數不會綁定在元素上,而是把他作為一個特殊的事件處理函數,綁定在 DOM樹的根節點上。在我們的例子中,當點擊新的元素后,會依次發生下列步驟:

1、生成一個click事件傳遞給<div> 來處理

2、由于沒有事件處理函數直接綁定在 <div>上,所以事件冒泡到DOM樹上

3、事件不斷冒泡一直到DOM樹的根節點,默認情況下上面綁定了這個特殊的事件處理函數。

4、執行由 .live()綁定的特殊的 click 事件處理函數。

5、這個事件處理函數首先檢測事件對象的 target 來確定是不是需要繼續。這個測試是通過檢測$(event.target).closest('.clickme') 能否找到匹配的元素來實現的。

6、如果找到了匹配的元素,那么調用原始的事件處理函數。

由于只有在事件發生時才會在上面的第五步里做測試,因此在任何時候添加的元素都能夠響應這個事件。


附加說明

.live()雖然很有用,但由于其特殊的實現方式,所以不能簡單的在任何情況下替換 .bind()。主要的不同有:

在jQuery 1.4中,.live()方法支持自定義事件,也支持所有的JavaScript 事件。在jQuery 1.4.1中,甚至也支持 focus 和 blue事件了(映射到更合適,并且可以冒泡的focusin和focusout上)。

另 外,在jQuery1.4.1中,也能支持hover(映射到"mouseenter mouseleave")。然而在jQuery1.3.x中,只支持支持的JavaScript事件和自定義事件:click, dblclick, keydown, keypress,keyup, mousedown, mousemove, mouseout, mouseover, 和 mouseup.

.live()并不完全支持通過DOM遍歷的方法找到的元素。取而代之的是,應當總是在一個選擇器后面直接使用 .live()方法,正如前面例子里提到的。

當一個事件處理函數用 .live()綁定后,要停止執行其他的事件處理函數,那么這個函數必須返回 false。 僅僅調用 .stopPropagation()無法實現這個目的。


參考 .bind() 方法可以獲得更多關于事件綁定的信息。

在jQuery 1.4.1中,你可以一次綁定多個事件給 .live() ,跟.bind() 提供的功能類似。

在jQuery 1.4中,data參數可以用于把附加信息傳遞給事件處理函數。一個很好的用處是應付由閉包導致的問題??梢詤⒖?.bind()的討論來獲得更多信息。


參數

typeString     事件類型

data(可選)    Object          欲綁定的事件處理函數

fn                  Function        欲綁定的事件處理函數


示例

HTML 代碼:

<p>Clickme!</p>

jQuery 代碼:
$("p").live("click", function(){
$(this).after("<p>Anotherparagraph!</p>");
});

描述:

阻止默認事件行為和事件冒泡,返回false

jQuery 代碼:
$("a").live("click",function() { return false; });

//根本原因在這,需要阻止默認事件行為和事件冒泡,在代碼后面添加return false;就OK了

描述:

僅僅阻止默認事件行為

jQuery 代碼:
$("a").live("click", function(event){
event.preventDefault();
});

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产91成人在在线播放| 欧美富婆性猛交| 91av在线看| 成人午夜一级二级三级| 欧美精品久久久久久久免费观看| 亚洲欧洲在线看| 色偷偷偷综合中文字幕;dd| 欧美电影在线免费观看网站| 欧美国产日韩免费| 亚洲福利小视频| 8090理伦午夜在线电影| 九色精品免费永久在线| 欧美自拍视频在线观看| 91chinesevideo永久地址| 久久国产精品电影| 久久国产精品久久久久| 欧美成人黄色小视频| 亚洲欧美激情视频| 2019中文字幕全在线观看| 国产精品无码专区在线观看| 韩国美女主播一区| 中日韩午夜理伦电影免费| 精品国产欧美一区二区三区成人| 日韩黄色高清视频| 最近的2019中文字幕免费一页| 午夜精品一区二区三区在线| 高清欧美性猛交xxxx黑人猛交| 色综合久久88| 日韩精品一二三四区| 国产日产欧美a一级在线| 97成人精品视频在线观看| 亚洲一区二区三区在线免费观看| 最近2019中文字幕大全第二页| 日韩中文字幕网| 亚洲a在线观看| 狠狠久久亚洲欧美专区| 岛国视频午夜一区免费在线观看| 精品人伦一区二区三区蜜桃免费| 亚洲第一中文字幕| 亚洲欧美在线看| 日韩av在线免播放器| 亚洲成人亚洲激情| 成人www视频在线观看| 另类视频在线观看| 国产ts人妖一区二区三区| 亚洲精品福利资源站| www.亚洲一二| 国产高清视频一区三区| 97av在线视频| 亚洲人成网站777色婷婷| www高清在线视频日韩欧美| 国产精品久久二区| 精品免费在线视频| 亚洲高清不卡av| 精品久久国产精品| 久久久天堂国产精品女人| 精品一区电影国产| 在线亚洲午夜片av大片| 亚洲免费伊人电影在线观看av| 精品国产乱码久久久久久婷婷| www欧美日韩| 亚洲电影免费观看高清完整版| 在线观看欧美成人| 欧美一级电影久久| 成人免费午夜电影| 亚洲第一视频在线观看| 91精品国产高清自在线看超| 一区二区亚洲欧洲国产日韩| xx视频.9999.com| 一本色道久久88亚洲综合88| 亚洲精品91美女久久久久久久| 日韩黄色高清视频| 韩日欧美一区二区| 久久激情五月丁香伊人| 久久久久久久久爱| 蜜臀久久99精品久久久久久宅男| 欧美日韩成人黄色| 国产欧美精品日韩| 亚洲美女www午夜| 中文字幕久久久| 日韩久久午夜影院| 国产精品视频白浆免费视频| 91久久精品国产91久久性色| 日韩精品在线电影| 国产欧美韩国高清| 日韩欧美极品在线观看| 欧美成人合集magnet| 精品成人国产在线观看男人呻吟| 日韩激情av在线播放| 亚洲精品电影网站| 中文字幕久久久av一区| 欧美成人免费在线视频| 九九久久久久久久久激情| 久久免费福利视频| 精品亚洲一区二区三区四区五区| 成人av在线网址| 91精品国产综合久久香蕉922| 亚洲精品动漫100p| 欧美大片免费看| 最新日韩中文字幕| 日韩视频免费大全中文字幕| 亚洲码在线观看| 欧美日韩在线影院| 欧美精品在线播放| 日韩日本欧美亚洲| 高清日韩电视剧大全免费播放在线观看| 欧美一级片在线播放| 日本精品久久电影| 欧美成人黑人xx视频免费观看| 亚洲成人精品久久久| 国产日韩精品一区二区| 国产一区二区动漫| 欧美日韩一区二区三区| 国产日本欧美在线观看| 精品国产一区二区三区在线观看| 欧美午夜精品久久久久久浪潮| 亚洲国产精品va在线看黑人动漫| 国产中文欧美精品| 亚洲自拍偷拍一区| 精品欧美一区二区三区| 欧美性猛交xxxx| 国产成人综合精品| 色悠久久久久综合先锋影音下载| 亚洲精品久久久久中文字幕欢迎你| 国产精品91在线| 色阁综合伊人av| 亚洲欧美精品在线| 91在线高清免费观看| 亚洲欧美日本另类| 欧美在线视频一二三| 亚洲精品中文字| 欧美亚洲第一区| 亚洲天堂男人天堂| 欧美资源在线观看| 日韩av电影在线免费播放| 日本久久久久久久| 日韩在线视频线视频免费网站| 国产美女精品免费电影| 欧美国产日韩一区| 久久久久久国产三级电影| 久久香蕉精品香蕉| 久久精品国产v日韩v亚洲| 国产精品一区=区| 国产精品视频网站| 欧美高清电影在线看| 92福利视频午夜1000合集在线观看| 日本19禁啪啪免费观看www| 性色av一区二区三区免费| 青青草一区二区| 456亚洲影院| 成人综合网网址| 欧美视频专区一二在线观看| 久久综合九色九九| 中文字幕欧美日韩精品| 日韩在线观看免费| 国产日韩av在线播放| 国产成人高清激情视频在线观看| 国产精品日韩一区| 国产精品第10页| 欧美日韩亚洲国产一区| 亚洲综合日韩中文字幕v在线| 日本三级韩国三级久久| 亚洲一品av免费观看| 欧美精品videosex性欧美|