亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

jQuery中的bind和live方法有什么區別?

jQuery中的bind和live方法有什么區別?

人到中年有點甜 2019-11-27 11:08:47
我很好奇知道bind和live函數之間的區別。在我看來,它們幾乎是相同的。我讀了live / bind方法的好處,但是并沒有告訴我區別。謝謝
查看完整描述

3 回答

?
繁花如伊

TA貢獻2012條經驗 獲得超12個贊

.bind()在調用時將事件附加到存在或匹配選擇器的元素。之后創建的任何元素或由于更改了類而繼續匹配的任何元素都不會觸發綁定事件。

.live()適用于現有和將來的匹配元素。在jQuery 1.4之前,此事件僅限于以下事件:click,dblclick mousedown,mouseup,mousemove,mouseover,mouseout,keydown,keypress,keyup


查看完整回答
反對 回復 2019-11-27
?
慕沐林林

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。


查看完整回答
反對 回復 2019-11-27
?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

想象這種情況:

  1. 我有幾個<img>要素。

    • $('img').bind('click', function(){...});

    • 添加一些額外的圖片(使用get()html(),任何東西)

    • 新圖像沒有任何約束!

當然,由于$('img')...在執行步驟2 時不存在新圖像,因此不會將事件處理程序綁定到它們。

現在,如果您這樣做:

  1. 我有幾個<img>要素。

    • $('img').live('click', function(){...});

    • 添加一些額外的圖片(使用get()html(),任何東西)

    • 新圖像確實具有約束力?。?/p>

魔法?一點點 實際上,jQuery將通用事件處理程序綁定到DOM樹中較高位置的另一個元素(body?document?nocept),并使事件冒泡。當到達通用處理程序時,live()無論元素是在live()調用之前還是之后創建的,它都會檢查事件是否與您的事件匹配,如果匹配,則將事件觸發。


查看完整回答
反對 回復 2019-11-27
  • 3 回答
  • 0 關注
  • 437 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號