click事件的累加綁定,綁定一次點擊事件,執行屢次

  個人github(PS:但願star):https://github.com/thWinterSun/v-adminhtml

  最近作項目爲一個添加按鈕綁定點擊事件,很簡單的一個事情,因而我按照一般作法找到元素,使用jquery的on()方法爲元素綁定了點擊事件,點擊同時發送請求。完成後看效果,第一次點擊沒有問題。再一次點擊後發現發送了兩次請求,後面再點擊發現請求的數量愈來愈多。這時我初步判斷多是元素有多個或是屢次調用了方法,但找了一遍,發現只爲一個元素綁定了事件,且只調用了一次。後來經過查資料才知道是點擊事件被累加綁定了!那到底什麼是累加綁定呢?何時會發生累加綁定?累加綁定後該如何解決呢?下面我就經過這三個問題來講一下。jquery

  

 1 $("#adsCollection_tb .contentDel").on("click",function(){
 2   $(this).each(function(){
 3    var obj_address_name = $(this).parent().parent().find(".obj_address_name").html();
 4       var jsonDel = {
 5           "head": {
 6             "module": "object",
 7             "function": "del_obj"
 8            },
 9            "body":[
10                   {
11              "name": obj_address_name
12                    }
13                    ]
14             }
15         alert("肯定要刪除這一條嗎?")
16         addrGroup.Ajax(jsonDel);
17                         
18    });
19 });

 

  在頁面中爲一個元素綁定事件,事件執行後頁面未刷新且元素還在,而後你再次點擊,元素又被綁定個一次點擊事件,這樣第二次點擊就會執行兩次,以此類推。git

  如何解決累加綁定:第一種方法是元素點擊後刪除,而後再動態建立一個元素,再添加點擊事件。顯然這個方式很麻煩。github

  第二中方法是使用jquery的one()方法,爲元素綁定一個一次性的事件處理函數,這個事件處理函數只會被執行一次。json

  

1 $("#adsCollection_tb").one("click",function(){
2    alert("執行"); 
3 })

 

  第三種方法是在每次綁定點擊事件前先解除以前的事件綁定,再爲元素綁定事件,相似於先清空,在作操做同樣。但你使用bind()方法綁定時,能夠用unbind()方法解除綁定。一般咱們跟願意用on()方法綁定事件,由於bind()方法已經不被推薦,那麼那麼就用off()方法解除事件綁定。函數

1 $("#adsCollection_tb").unbind("click").bind("click",function(){
2     alert("執行"); 
3  });
4  $("#adsCollection_tb").off("click").on("click",function(){
5     alert("執行"); 
6 });
相關文章
相關標籤/搜索