javascript事件綁定、事件解綁,多事件衝突總結

(1)全局監聽事件
$(document).on( "swipeleft", function(e){
mpView.swipeleftTime();
});




*注意:要用匿名函數,外調函數會出異常








(2)bind跟on的區別


bind()函數是jQuery 1.7之前或更早版本採用的一個用來綁定事件處理程序的函數;on()函數是jQuery 1.7版本提供的首選的用來綁定事件處理程序的函數;




其實這兩個函數基本上用法一致,中,bind()函數一次只能爲標籤對象綁定一個事件的處理程序,而on()函數則可以一次爲多個不同的事件綁定處理程序。








*注意事項:


on跟bind在給組件綁定事件時,函數要用匿名函數,不要用外調函數,要不會出異常


對的
$("#"+data.list[i].bustype).on("click",function(){alert("heihei");});


錯的
$("#"+data.list[i].bustype).on("click",pageView.haha());














(3)unbind  鬆綁解除事件


(1)解除指定元素所有的事件
$("p").unbind();








(2)解除指定元素指定事件
$("p").unbind("swipeleft");










(3)解除指定元素指定事件的指定函數
$("p").unbind("swipeleft",function(){});






(3.5)(這句話需謹慎 很bug 幾乎就是個bug 只在重慶銀行實現過)解除全局document上的指定組件的事件方法
$(document).unbind("swipeleft","#frame-page",function(e){
Backbone.history.history.back();
});








(4)*注意事項
跟on bind一樣 要用匿名函數














(4)***(很吊)把局部監聽事件掛到全局




局部監聽當你切換到其他頁面回來後監聽會失效
掛到全局就可以一直監聽
這是個bug




局部監聽
$("#id").on("click",function(e){


});






掛到全局
$(document).on("click","#id",function(e){


});






局部監聽當你切換到其他頁面回來後監聽會失效
掛到全局就可以一直監聽
這是個bug






----------------------------------------------------------------------------------------------------------


解決多事件衝突




(1)阻止多事件的冒泡
就是一個div包着以個input 相隔控件都被綁定了事件
你只想執行input控件的事件不想執行div事件
用下面這句話:
e.stopPropagation()










代碼塊:
$("input").bind(


  "click", 


  function(event){
alert("hehe");
    event.stopPropagation();
  }


);










(2)阻止默認行爲
比如給一個submit控件綁定了click事件 
但是隻想促發click不想促發提交submit事件 
就用下面這句話:
e.preventDefault();






代碼塊:
$("input").bind(


  "click", 


  function(event){
alert("hehe");
    event.preventDefault();
  }


);






(3)阻止默認行爲跟冒泡行爲
return false




代碼塊:
$("input").bind(


  "click", 


  function(event){
alert("hehe");
    return false;


  }


);



































發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章