W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
jQuery 給所有匹配的元素附加一個事件處理函數(shù),即使這個元素是以后再添加進來的也有效。
這個方法是基本是的 .bind() 方法的一個變體。使用 .bind() 時,選擇器匹配的元素會附加一個事件處理函數(shù),而以后再添加的元素則不會有。為此需要再使用一次 .bind() 才行。比如說
<body>
<div class="clickme">Click here</div>
</body>
可以給這個元素綁定一個簡單的click事件:
$('.clickme').bind('click', function() {
alert("Bound handler called.");
});
當點擊了元素,就會彈出一個警告框。然后,想象一下這之后有另一個元素添加進來了。
$('body').append('<div class="clickme">Another target</div>');
盡管這個新的元素也能夠匹配選擇器 ".clickme" ,但是由于這個元素是在調(diào)用 .bind() 之后添加的,所以點擊這個元素不會有任何效果。
.live() 就提供了對應(yīng)這種情況的方法。如果我們是這樣綁定click事件的:
$('.clickme').live('click', function() {
alert("Live handler called.");
});
然后再添加一個新元素:
$('body').append('<div class="clickme">Another target</div>');
然后再點擊新增的元素,他依然能夠觸發(fā)事件處理函數(shù)。
事件委托
.live() 方法能對一個還沒有添加進DOM的元素有效,是由于使用了事件委托:綁定在祖先元素上的事件處理函數(shù)可以對在后代上觸發(fā)的事件作出回應(yīng)。傳遞給 .live() 的事件處理函數(shù)不會綁定在元素上,而是把他作為一個特殊的事件處理函數(shù),綁定在 DOM 樹的根節(jié)點上。在我們的例子中,當點擊新的元素后,會依次發(fā)生下列步驟:
由于只有在事件發(fā)生時才會在上面的第五步里做測試,因此在任何時候添加的元素都能夠響應(yīng)這個事件。
附加說明
.live() 雖然很有用,但由于其特殊的實現(xiàn)方式,所以不能簡單的在任何情況下替換 .bind()。主要的不同有:
參考 .bind() 方法可以獲得更多關(guān)于事件綁定的信息。
在jQuery 1.4.1 中,.live() 能接受多個,用空間分隔事件,在提供類似.bind()的功能 。例如,我們可以“l(fā)ive ” 同時綁定mouseover和mouseout事件,像這樣:
$('.hoverme').live('mouseover mouseout', function(event) {
if (event.type == 'mouseover') {
// do something on mouseover
} else {
// do something on mouseout
}
});
在jQuery 1.4.3中:你可以綁定一個或多個事件類型的字符串和函數(shù)的數(shù)據(jù)映射來執(zhí)行他們
$("a").live({
click: function() {
// do something on click
},
mouseover: function() {
// do something on mouseover
}
});
在jQuery 1.4 中,data參數(shù)可以用于把附加信息傳遞給事件處理函數(shù)。一個很好的用處是應(yīng)付由閉包導(dǎo)致的問題。可以參考 .bind() 的討論來獲得更多信息。
在jQuery 1.4 中, live事件可以綁定到“context”DOM元素,而不是默認的文檔的根。要設(shè)置此背景下,我們通過在一個單一的DOM元素(而不是一個jQuery集合或選擇器)使用jQuery() function's second argument。
$('div.clickme', $('#container')[0]).live('click', function() {
// Live handler called.
});
type:一個或多個事件類型,由空格分隔多個事件。
fn:要從每個匹配元素的事件中反綁定的事件處理函數(shù)
type:一個或多個事件類型,由空格分隔多個事件。
data:傳遞給事件處理函數(shù)的附加參數(shù)
false:設(shè)置為false會使默認的動作失效。
一個或多個事件類型的字符串和函數(shù)的數(shù)據(jù)映射來執(zhí)行他們
點擊生成的p依然據(jù)有同樣的功能。
<p>Click me!</p>
$("p").live("click", function(){
$(this).after("<p>Another paragraph!</p>");
});
阻止默認事件行為和事件冒泡,返回 false
$("a").live("click", function() { return false; });
僅僅阻止默認事件行為
$("a").live("click", function(event){
event.preventDefault();
});
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: