3 回答

TA貢獻2012條經(jīng)驗 獲得超12個贊
.bind()在調(diào)用時將事件附加到存在或匹配選擇器的元素。之后創(chuàng)建的任何元素或由于更改了類而繼續(xù)匹配的任何元素都不會觸發(fā)綁定事件。
.live()適用于現(xiàn)有和將來的匹配元素。在jQuery 1.4之前,此事件僅限于以下事件:click,dblclick mousedown,mouseup,mousemove,mouseover,mouseout,keydown,keypress,keyup

TA貢獻2016條經(jīng)驗 獲得超9個贊
簡而言之:.bind()僅適用于您當前在jQuery對象中選擇的項目。.live()將適用于所有當前匹配的元素,以及將來可能添加的任何元素。
它們之間的根本區(qū)別是live()利用事件冒泡。也就是說,當您單擊一個按鈕時,該按鈕可能存在于元素<p>中的<div>,,中<body>。因此實際上,您實際上是同時單擊所有這些元素。
live()通過將事件處理程序附加到文檔而不是元素上,可以工作。當您單擊該按鈕時,如前所示,文檔將收到相同的單擊事件。然后,它會備份事件所針對的元素行,并檢查是否有任何元素與您的查詢匹配。
結(jié)果是雙重的:首先,這意味著您不必繼續(xù)將事件重新應(yīng)用于新元素,因為事件發(fā)生時會隱式添加事件。但是,更重要的是(取決于您的情況),這意味著您的代碼要輕得多!如果<img>頁面上有50個標簽,并且您運行以下代碼:
$('img').click(function() { /* doSomething */ });
...然后將該函數(shù)復制到每個元素中。但是,如果您有以下代碼:
$('img').live('click', function() { /* doSomething */ });
...然后該函數(shù)僅存儲在一個位置(在文檔中),并在事件發(fā)生時應(yīng)用于與您的查詢匹配的任何內(nèi)容。
由于這種冒泡行為,因此并非所有事件都可以用這種方式處理。如Ichiban所述,這些受支持的事件包括click,dblclick mousedown,mouseup,mousemove,mouseover,mouseout,keydown,keypress,keyup。

TA貢獻1834條經(jīng)驗 獲得超8個贊
想象這種情況:
我有幾個
<img>
要素。$('img').bind('click', function(){...});
添加一些額外的圖片(使用
get()
或html()
,任何東西)新圖像沒有任何約束!
當然,由于$('img')...
在執(zhí)行步驟2 時不存在新圖像,因此不會將事件處理程序綁定到它們。
現(xiàn)在,如果您這樣做:
我有幾個
<img>
要素。$('img').live('click', function(){...});
添加一些額外的圖片(使用
get()
或html()
,任何東西)新圖像確實具有約束力??!
魔法?一點點 實際上,jQuery將通用事件處理程序綁定到DOM樹中較高位置的另一個元素(body?document?nocept),并使事件冒泡。當?shù)竭_通用處理程序時,live()
無論元素是在live()
調(diào)用之前還是之后創(chuàng)建的,它都會檢查事件是否與您的事件匹配,如果匹配,則將事件觸發(fā)。
- 3 回答
- 0 關(guān)注
- 438 瀏覽
添加回答
舉報