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;
}
);
$(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;
}
);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.