最新Jquery中bind和live的區別html
如下是三零網爲你們整理的最新Jquery中bind和live的區別的文章,但願你們可以喜歡!jquery
Jquery中綁定事件有三種方法:以click事件爲例app
(1)target.click(function(){});框架
(2)target.bind("click",function(){});ide
(3)target.live("click",function(){});函數
第一種方法很好理解,其實就和普通JS的用法差很少,只是少了一個on而已測試
第2、三種方法都是綁定事件,可是兩者又有很大的不一樣,下面着重講解一下,由於這個若是用到Jquery的框架的話是用的挺多的,尤爲要注意兩者的區別。spa
【bind和live的區別】orm
live方法實際上是bind方法的變種,其基本功能就同bind方法的功能是同樣的,都是爲一個元素綁定某個事件,可是bind方法只能給當前存在的元素綁定事件,對於過後採用JS等方式新生成的元素無效,而live方法則正好彌補了bind方法的這個缺陷,它能夠對後生成的元素也能夠綁定相應的事件。那麼live方法的這個特性是怎麼實現的呢?下面來探討一下其實現原理。htm
live方法之因此能對後生成的元素也綁定相應的事件的緣由歸結在「事件委託」上面,所謂「事件委託」就是指綁定在祖先元素上的事件能夠在其後代元素上進行使用。live方法的處理機制就是把事件綁定在DOM樹的根節點上,而不是直接綁定在某個元素上。舉一個例子來講明:
$(".clickMe").live("click",fn);
$("body").append("<div class='clickMe'>測試live方法的步驟</div>");
當咱們點擊這個新增的元素時會依次發生以下步驟:
(1)生成一個click事件,傳遞給div來作處理
(2)因爲沒有事件直接綁定在div上,因此事件直接冒泡到DOM樹上
(3)事件不斷冒泡,直到DOM樹的根節點上,默認狀況下,根節點上就綁定了這個click事件
(4)執行由live綁定的click事件
(5)檢測綁定事件的對象是否存在,判斷是否須要繼續執行綁定的事件。檢測事件對象是經過檢測
$(event.target).closest('.clickMe') 可否找到匹配的元素來實現的。
(6)經過(5)的測試,若是綁定事件的對象存在的話,就執行綁定的事件。
因爲只有在事件發生的時候,live方法纔會去檢測綁定事件的對象是否存在,因此live方法能夠實現後來新增的元素也可實現事件的綁定。相比之下,bind會在事件在綁定階段就會判斷綁定事件的元素是否存在,並且只針對當前元素進行綁定,而不是綁定到父節點上。
根據上面的分析,live的好處真是很大,那麼爲何還要使用bind方法呢?之因此jquery要保留bind方法而不是採用live方法去替代bind,也是由於live在某些狀況下是不可以徹底替代bind的。主要的不一樣以下:
(1)bind方法能夠綁定任何JavaScript的事件,而live方法在jQuery1.3的時候只支持click, dblclick, keydown, keypress,
keyup,mousedown, mousemove, mouseout, mouseover, 和 mouseup.在jQuery 1.4.1中,甚至也支持 focus 和 blue
事件了(映射到更合適,而且能夠冒泡的focusin和focusout上)。另外,在jQuery 1.4.1中,也能支持hover(映射
到"mouseenter mouseleave")。
(2)live() 並不徹底支持經過DOM遍歷的方法找到的元素。取而代之的是,應當老是在一個選擇器後面直接使用 .live()
方法。
(3)當一個元素採用live方法進行事件的綁定的時候,若是想阻止事件的傳遞或冒泡,就要在函數中return false,僅僅調
用stopPropagation()是沒法實現阻止事件的傳遞或者冒泡的
轉載來自:http://www.q3060.com/list3/list115/106.html