3 回答

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

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

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