Jquery之事件綁定(bind(),live(),delegate(),on())

來源:互聯網
上載者:User

標籤:style   blog   class   c   code   java   

1、.bind()

描述: 為一個元素繫結一個事件處理常式。

.bind()一個基本的用法:

$(selector).bind('click', function() {  alert('User clicked on "foo."');});
可以直接用原生js替代為:
$(selector).click( function() {  alert('User clicked on "foo."');});
在jQuery1.4.3,您現在可以通過傳遞false代替一個事件處理常式。這將相當於一個事件處理常式綁定寫成這樣:function(){ return false; }。在以後通過調用.unbind( eventName, false )來移除這個函數。

具體請參照:http://www.css88.com/jqapi-1.9/bind/

2、live()

描述: 附加一個事件處理器到匹配目前選取器的所有元素,現在和未來。

.live()方法是簡單的;以下是三種事件添加方法的模板,它們是等價的:

$(selector).live(events, data, handler);                // jQuery 1.3+$(document).delegate(selector, events, data, handler);  // jQuery 1.4.3+$(document).on(events, selector, data, handler);        // jQuery 1.7+
events 參數可以是一個空格隔開的事件類型名稱的列表和可選的命名空間,或事件名稱字串和處理常式的對象。data參數是可選的,可以省略。例如,以下三種方法調用方式在功能上是相同的(後文還提供了更有效,效能更好的添加代理事件處理的方式):
$("a.b").live("click", function(){ alert("Goodbye!"); });                // jQuery 1.3+$(document).delegate("a.offsite", "click", function(){ alert("Goodbye!"); });  // jQuery 1.4.3+$(document).on("click", "a.offsite", function(){ alert("Goodbye!"); });        // jQuery 1.7+
.live()方法不再推薦使用。特別是,使用.live()出現的以下問題:
在調用 .live() 方法之前,jQuery 會先擷取與指定的選取器匹配的元素,這一點對於大型文檔來說是很花費時間的。
不支援鏈式寫法。例如,$("a").find(".offsite, .external").live( ... ); 這樣的寫法是不合法的,並不能像期待的那樣起作用。
由於所有的 .live() 事件被添加到 document 元素上,所以在事件被處理之前,可能會通過最長最慢的那條路徑之後才能被觸發。
在移動 iOS (iPhone, iPad 和 iPod Touch) 上,對於大多數元素而言,click 事件不會冒泡到文檔 body 上,並且如果不滿足如下情況之一,就不能和 .live() 方法一起使用:
使用原生的可被點擊的元素,例如, a 或 button,因為這兩個元素可以冒泡到 document。
在 document.body 內的元素使用 .on() 或 .delegate() 進行綁定,因為移動 iOS 只有在 body 內才能進行冒泡。
需要 click 冒泡到元素上才能應用的 CSS 樣式 cursor:pointer (或者是父元素包含 document.documentElement)。但是依需注意的是,這樣會禁止元素上的複製/粘貼功能,並且當點擊元素時,會導致該元素被高亮顯示。
在事件處理中調用 event.stopPropagation() 來阻止事件處理被添加到 document 之後的節點中,是效率很低的。因為事件已經被傳播到 document 上。
.live() 方法與其它事件方法的相互影響是會令人感到驚訝的。例如,$(document).unbind("click") 會移除所有通過 .live() 添加的 click 事件!
對於仍在使用.live()的頁面,那麼下面關於該方法在不同版中的區別,可能會對您有一定協助:
在 jQuery 1.7 之前,如果想阻止通過 .live() 綁定的事件被冒泡到其它元素上,必須在事件處理中返回 false。調用 .stopPropagation() 是不起作用的。
從 jQuery 1.4 開始,.live() 方法支援自訂事件,也支援所有 JavaScript 事件冒泡。它還支援一些原本不能冒泡的事件,包括 change, submit, focus 和 blur。
在 jQuery 1.3.x 中,只能綁定如下 JavaScript 事件:click, dblclick, keydown, keypress, keyup, mousedown, mousemove, mouseout, mouseover, 和 mouseup.

具體請參照:http://www.css88.com/jqapi-1.9/live/

例子:
Example: 點擊段落時,添加另一個段落。注意,.live() 會為所有的段落(包括新產生的段落)綁定事件。

$("a").live("click", function() { return false; })

Example: 通過使用 preventDefault 方法僅取消預設的動作。
$("a").live("click", function(event){  event.preventDefault();});

Example: 使用 .live() 綁定自訂事件。

$("p").live("myCustomEvent", function(e, myName, myValue) {  $(this).text("Hi there!");  $("span").stop().css("opacity", 1)           .text("myName = " + myName)           .fadeIn(30).fadeOut(1000);});$("button").click(function () {  $("p").trigger("myCustomEvent");});

Example: 使用映射綁定多個事件處理。注意,.live() 會為所有的段落(包括新產生的段落)綁定 click, mouseover, 和 mouseout 事件。
$("p").live({  click: function() {    $(this).after("<p>Another paragraph!</p>");  },  mouseover: function() {    $(this).addClass("over");  },  mouseout: function() {    $(this).removeClass("over");  }});
3、delegate()
描述: 為所有匹配選取器(selector參數)的元素繫結一個或多個事件處理函數,基於一個指定的根項目的子集,匹配的元素包括那些目前已經匹配到的元素,也包括那些今後可能匹配到的元素。

這些是兩種方法的等效的方法:

// jQuery 1.4.3+$( elements ).delegate( selector, events, data, handler );// jQuery 1.7+$( elements ).on( events, selector, data, handler );

例如, 下面的 .delegate() 代碼:
$("table").delegate("td", "click", function() {  $(this).toggleClass("chosen");});

從jQuery 1.7開始,.delegate()已經被.on()方法取代

是等價於下面使用.on()的代碼:

$("table").on("click", "td", function() {  $(this).toggleClass("chosen");});

要移除使用delegate()綁定的事件, .undelegate()方法。

直接給例子:

<script type="text/javascript">$(document).ready(function(){$("p").delegate("dragstart",function(){$(this).append("<span>發生了dragstart事件</span>");});$("#btn").click(function(){$("p").undelegate("dragstart");});});</script>

具體請參照:http://www.css88.com/jqapi-1.9/delegate/

4、on()

jQuery on()方法是官方推薦的綁定事件的一個方法。

$(selector).on(event,childSelector,data,function,map)
直接上例子: tip:如果你需要移除on()所綁定的方法,可以使用off()方法處理。

$(document).ready(function(){  $("p").on("click",function(){    $(this).css("background-color","pink");  });  $("button").click(function(){    $("p").off("click");  });});

tip: 如果你的事件只需要一次的操作,可以使用one()這個方法

$(document).ready(function(){  $("p").one("click",function(){    $(this).animate({fontSize:"+=6px"});  });});

具體請參照:http://www.cnblogs.com/leejersey/p/3545372.html







聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.