最近做項目為一個添加按鈕綁定點擊事件晃听,很簡單的一個事情百侧,于是我按照通常做法找到元素,使用jquery的on()方法為元素綁定了點擊事件杂伟,點擊同時發(fā)送請求移层。完成后看效果,第一次點擊沒有問題赫粥。再一次點擊后發(fā)現(xiàn)發(fā)送了兩次請求观话,后面再點擊發(fā)現(xiàn)請求的數(shù)量越來越多越平。這時我初步判斷可能是元素有多個或是多次調(diào)用了方法频蛔,但找了一遍,發(fā)現(xiàn)只為一個元素綁定了事件秦叛,且只調(diào)用了一次晦溪。后來通過查資料才知道是點擊事件被累加綁定了!那到底什么是累加綁定呢挣跋?什么時候會發(fā)生累加綁定三圆?累加綁定后該如何解決呢?下面我就通過這三個問題來說一下避咆。
$("#ads_tb .contentDel").on("click",function(){
$(this).each(function(){
var addr_name = $(this).parent().find(".obj_name").html();
var jsonDel ={
"name": addr_name
}
alert("確定要刪除這一條嗎舟肉?")
Group.Ajax(jsonDel);
});
});
在頁面中為一個元素綁定事件,事件執(zhí)行后頁面未刷新且元素還在查库,然后你再次點擊路媚,元素又被綁定個一次點擊事件,這樣第二次點擊就會執(zhí)行兩次樊销,以此類推整慎。
如何解決累加綁定:第一種方法是元素點擊后刪除脏款,然后再動態(tài)創(chuàng)建一個元素,再添加點擊事件裤园。顯然這個方式很麻煩撤师。
第二中方法是使用jquery的one()方法,為元素綁定一個一次性的事件處理函數(shù)拧揽,這個事件處理函數(shù)只會被執(zhí)行一次丈氓。
$("#adsCollection_tb").one("click",function(){
alert("執(zhí)行");
});
第三種方法是在每次綁定點擊事件前先解除之前的事件綁定,再為元素綁定事件强法,類似于先清空万俗,在做操作一樣。但你使用bind()方法綁定時饮怯,可以用unbind()方法解除綁定闰歪。通常我們跟愿意用on()方法綁定事件,因為bind()方法已經(jīng)不被推薦蓖墅,那么那么就用off()方法解除事件綁定库倘。
$("#adsCollection_tb").unbind("click").bind("click",function(){
alert("執(zhí)行");
});
$("#adsCollection_tb").off("click").on("click",function(){
alert("執(zhí)行");
});