jquery on事件jquery on實現綁定多個事件


API上jquery on介紹

on(events,[selector],[data],fn)

概述

在選擇元素上綁定一個或多個事件的事件處理函數。

on()方法綁定事件處理程序到當前選定的jQuery對象中的元素。在jQuery 1.7中,.on()方法 提供綁定事件處理程序所需的所有功能。幫助從舊的jQuery事件方法轉換,see .bind(), .delegate(), 和 .live(). 要刪除的.on()綁定的事件,請參閱.off()。要附加一個事件,只運行一次,然后刪除自己, 請參閱.one()

參數

events,[selector],[data],fnV1.7

events:一個或多個用空格分隔的事件類型和可選的命名空間,如"click"或"keydown.myPlugin" 。

selector:一個選擇器字符串用於過濾器的觸發事件的選擇器元素的后代。如果選擇的< null或省略,當它到達選定的元素,事件總是觸發。

data:當一個事件被觸發時要傳遞event.data給事件處理函數。

fn:該事件被觸發時執行的函數。 false 值也可以做一個函數的簡寫,返回false。

events-map,[selector],[data]V1.7

events-map:個用字符串表示的,一個或多個空格分隔的事件類型和可選的命名空間,值表示事件綁定的處理函數。

selector:一個選擇器字符串過濾選定的元素,該選擇器的后裔元素將調用處理程序。如果選擇是空或被忽略,當它到達選定的元素,事件總是觸發。

data:當一個事件被觸發時要傳遞event.data給事件處理函數。

示例

描述:

Display a paragraph's text in an alert when it is clicked:

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

Pass data to the event handler, which is specified here by name:

function myHandler(event) { alert(event.data.foo); } $("p").on("click", {foo: "bar"}, myHandler)

Cancel a form submit action and prevent the event from bubbling up by returning false:

$("form").on("submit", false)

Cancel only the default action by using .preventDefault().

$("form").on("submit", function(event) {  event.preventDefault(); });

Stop submit events from bubbling without preventing form submit, using .stopPropagation().

$("form").on("submit", function(event) {  event.stopPropagation(); });

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

$(selector).on(event,childSelector,data,function,map)

由此擴展開來的幾個以前常見的方法有.

bind()

  $("p").bind("click",function(){

    alert("The paragraph was clicked.");

  });

  $("p").on("click",function(){

    alert("The paragraph was clicked.");

  });

delegate()

  $("#div1").on("click","p",function(){

    $(this).css("background-color","pink");

  });

  $("#div2").delegate("p","click",function(){

    $(this).css("background-color","pink");

  });

live()

  $("#div1").on("click",function(){

    $(this).css("background-color","pink");

  });

  $("#div2").live("click",function(){

    $(this).css("background-color","pink");

  });

以上三種方法在jQuery1.8之后都不推薦使用,官方在1.9時已經取消使用live()方法了,所以建議都使用on()方法。

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"});

  });

});

trigger()綁定

$(selector).trigger(event,eventObj,param1,param2,...)

$(document).ready(function(){

  $("input").select(function(){

    $("input").after(" Text marked!");

  });

  $("button").click(function(){

    $("input").trigger("select");

  });

});

多個事件綁定同一個函數

$(document).ready(function(){

  $("p").on("mouseover mouseout",function(){

    $("p").toggleClass("intro");

  });

});

多個事件綁定不同函數

$(document).ready(function(){

  $("p").on({

    mouseover:function(){$("body").css("background-color","lightgray");},  

    mouseout:function(){$("body").css("background-color","lightblue");}, 

    click:function(){$("body").css("background-color","yellow");}  

  });

});

綁定自定義事件

$(document).ready(function(){

  $("p").on("myOwnEvent", function(event, showName){

    $(this).text(showName + "! What a beautiful name!").show();

  });

  $("button").click(function(){

    $("p").trigger("myOwnEvent",["Anja"]);

  });

});

傳遞數據到函數

function handlerName(event) 

{

  alert(event.data.msg);

}

$(document).ready(function(){

  $("p").on("click", {msg: "You just clicked me!"}, handlerName)

});

適用於未創建的元素

$(document).ready(function(){

  $("div").on("click","p",function(){

    $(this).slideToggle();

  });

  $("button").click(function(){

    $("<p>This is a new paragraph.</p>").insertAfter("button");

  });

});

前幾天在看《jquery基礎教程》,看到事件委托的時候,關於live()方法講的不是很詳細,就去搜了一下關於live()和delegate()的。

然后在一處看到live()已經被移除了,囧,然后去看了最新的jq源碼,果然被移除了,現在是1.9.1版本,不知道live()是在之前哪個版本被移除的,慚愧啊,之前都沒留意。

看源碼發現bind()和delegate()都是由on()實現的。on()的描述如下:

復制代碼代碼如下:


.on( events [, selector ] [, data ], handler(eventObject) )


一個簡單的事件綁定如 $('button').on('click',function(){}); 與bind()無二樣。

在需要為較多的元素綁定事件的時候,優先考慮事件委托,可以帶來性能上的好處。比如:

 

 

 

 

如上圖,將click事件綁定在document對象上,頁面上任何元素發生的click事件都冒泡到document對象上得到處理。

注意到.on()的描述中第二個可選參數:selector。如下圖,添加了第二個參數,選擇符button:

 

 


結果:

 

 

當事件冒泡到document對象時,檢測事件的target,如果與傳入的選擇符(這里是button)匹配,就觸發事件,否則不觸發。

注意.on()也可以接收一個對象參數,該對象的屬性是事件類型,屬性值為事件處理函數。下面是官方文檔的一個例子:

 

 

最后有一點,原先的live()方法,處理函數是默認綁定在document對象上不能變的,如果DOM嵌套結構很深,事件冒泡通過大量祖先元素會導致較大的性能損失。而使用.on()方法,事件只會綁定到$()函數的選擇符表達式匹配的元素上(上面我的例子中,為了簡單綁定到了document),因此可以精確地定位到頁面中的一部分,而事件冒泡的開銷也可以減少。delegate()與on()同理,畢竟是用on()實現的:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM