綁定click事件,使用jquery的$().click(func)?別鬧了,屬實是low。css
雖然以前在ajax回調成功後經過dom添加過元素,遇到過這種狀況,事件綁定會失效。今天又遇到了,在此總結下。jquery
jQuery on()方法是官方推薦的綁定事件的一個方法。面試
$(selector).on(event,childSelector,data,function,map)
$().click()和$(document).on('click','要選擇的元素',function(){})的ajax
最大的區別即優勢是若是動態建立的元素在該選擇器選中範圍內是能觸發回調函數。dom
$().on()的知識點補充:
1.從jQuery 1.7開始,on()
函數提供了綁定事件處理程序所需的全部功能,用於統一取代之前的bind()、 delegate()、 live()等事件函數。
$().bind()直接綁定在元素上,和click,blur,mouseon同樣的點擊事件。
$().live()是經過冒泡的方式來綁定到元素上的。更適合列表類型的,綁定到document DOM節點上。
$().delegate()是更精確的小範圍的使用事件代理。
$().on()結合了這三個方法的優點摒棄了劣勢。ide
2.該函數能夠爲同一元素、同一事件類型綁定多個事件處理函數。觸發事件時,jQuery會按照綁定的前後順序依次執行綁定的事件處理函數。
3. 阻止事件冒泡和事件委託的方法:
A:return false。
在事件的處理中,能夠阻止默認事件和冒泡事件。函數
B:event.preventDefault()
在事件的處理中,能夠阻止默認事件可是容許冒泡事件的發生。this
C:event.stopPropagation().。
在事件的處理中,能夠阻止冒泡可是容許默認事件的發生。spa
由jQuery on()擴展開來的幾個之前常見的方法有.代理
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"); }); });
項目經理是這麼說的,還在用.click,你這樣面試是會被刷下去的。。。