1. 程式人生 > >jquery中的bind()、live()的區別與使用(事件處理)

jquery中的bind()、live()的區別與使用(事件處理)

綁定 HA 我們 doc dso 目標 code span ive

原文:jquery中的bind()、live()的區別與使用(事件處理)

使用jquery有一段時間了,剛開始看別人的源代碼的時候對事件的綁定方法有疑惑。比如:

var btn=$("#button"); 
 btn.click(function(){ 
 alert("I have been clicked!"); 
 }); 

這就綁定了一個click事件。

1.bind()方法解析

但後來發現jqueryAPI裏面還有bind方法,一直沒有使用過,查看API的使用方法:

$("p").bind("click", function(){
  alert( $(this
).text() ); });

同時綁定多個事件類型

$(‘#foo‘).bind(‘mouseenter mouseleave‘, function() {
  $(this).toggleClass(‘entered‘);
});

註意:事件類型名稱用空格隔開,使用場景:多個事件類型做同一個動作時使用。

相對於直接註冊事件,bind()方法可以綁定多個事件,相同之處是都是綁定在目標對象上面,這個方法是存在最久的,而且也很好的解決了瀏覽器在事件處理中的兼容問題

註意如果父層有綁定事件的情況下,需要阻止一下冒泡,e.stopPropagation()和e.cancellBubble().

2.live()方法解析

使用情況如下:

$(‘#foo‘).live(‘click‘, function() {
  $(this).toggleClass(‘entered‘);
});//.live()方法用到了事件委托的概念來處理事件的綁定。

live()方法用到了事件委托的概念來處理事件的綁定。它和用.bind()來綁定事件是一樣的。區別之處在於:

live()總是找到事件對象(event.target)的頂級元素(document),並在document節點上進行事件綁定,通過事件冒泡的機制進行事件委派,使用時只需要定義一次,可以滿足所有符合要求的事件對象,使用環境是多個對象做同一個類型的事情的時候,比如要讓所有的元素彈出自己的ID 代碼如下:

<div id="parent">
            <div id="son">
                <div id="grandson">
                    fffffffff
                </div>
            </div>          
 </div>

我們現在要讓三個div都要彈出自己的ID

JS代碼如下:

$("#parent").live("click",function(){
     alert($(this).id);     
})        

jquery中的bind()、live()的區別與使用(事件處理)