2014-02-28 27 views
0

使用jQuery(1.10),以解除綁定點擊的事件:取消綁定/關閉點擊事件在jQuery中不起作用?

function fnDoVoteContent() { 
    var btnUpvote = ".btn-upvoting"; 
    var btnDownVote = ".btn-downvoting"; 

    $(document).on('click', btnUpvote, function(){ 
     vote(param1, param2, param3); 
    }); 


    $(document).on('click', btnDownVote, function(){ 
     vote(param1, param2, param3); 
    }); 
} 

function vote(param1, param2, param3) { 

    $.ajax({ 
     url: votingUrl, 
     cache: false, 
     type: "POST", 
     dataType: "json", 
     beforeSend: function(){ 
      //do business logic 
      $("a").off("click"); // Line 1: Unbind clicked events 

     }, 
     complete: function(){ 
      //do business logic 
      $("a").on("click"); // Line 2: re-bind again 

     }, 
     success: function(data) { 
      //update data 
     } 
    }); 
} 

業務邏輯代碼的工作,但在Line 1 and 2代碼沒有工作。難道我做錯了什麼?

回答

1

這不是它的工作原理嗎?你必須綁定和取消綁定到同一個選擇器,並且你必須重新綁定到一個函數,只要做$('a').on('click')什麼都不做。

爲此,您可以使用名稱空間的事件

function fnDoVoteContent() { 
    var btnUpvote = ".btn-upvoting"; 
    var btnDownVote = ".btn-downvoting"; 

    // bind event handlers 
    $(document).on('click.custom', btnUpvote, function(){ 
     vote(param1, param2, param3); 
    }); 

    $(document).on('click.custom', btnDownVote, function(){ 
     vote(param1, param2, param3); 
    }); 
} 

function vote(param1, param2, param3) { 

    $.ajax({ 
     url: votingUrl, 
     cache: false, 
     type: "POST", 
     dataType: "json", 
     beforeSend: function(){ 
      //do business logic 

      // unbind has to be done on the same selector 
      $(document).off('click.custom'); 

     }, 
     complete: function(){ 
      //do business logic 
      $(document).on('click.custom', btnUpvote, function(){ 
       vote(param1, param2, param3); 
      }); 

      $(document).on('click.custom', btnDownVote, function(){ 
       vote(param1, param2, param3); 
      }); 

     }, 
     success: function(data) { 
      //update data 
     } 
    }); 
} 
相關問題