2012-10-26 26 views
0

如何取消關閉#submit點擊事件?從功能內的jQuery Undelegate

$(document).ready(function(){ 
      $(".agent img").click(function(){ 
       $(".agent-form").remove(); 
       var agentid = $(this).attr("alt"), 
        response = "<form method='post' action='' class='agent-form'><textarea placeholder='Your Comment' name='comment' id='comment'></textarea><input type='button' value='submit' id='submit' /></form>"; 
       $(response).hide().appendTo(this.parentNode).fadeIn(); 
       $(".agent").delegate("#submit","click",function(){ 
        var message = $("#comment").val(); 
        message = escape(message); 
        var dataString = "agent="+agentid+"&message="+message; 
        $.ajax({ 
         type: "POST", 
         url: "includes/newcomment.asp", 
         data: dataString, 
         success: function(){ 
          console.log(dataString); 
         } 
        }); 
       }); 
      }); 
     }); 

我想undelegate以前.agent IMG點擊創建的所有#submit click事件。問題是,如果用戶點擊一個代理img,然後決定點擊另一個img,ajax提交給不同的數據行。

+0

看起來像這裏的問題是,因爲頁面上重複的ID的的..嘗試使用類代替它們 –

回答

1

jQuery doc for .delegate(),您可以使用.undelegate()刪除事件處理程序。

您不會向我們展示您的HTML,但這聽起來更像是您應該只有一個總是存在的委派事件處理程序,而不是創建一個,刪除一個,創建另一個等等......您可以存儲agentid在創建它時在form元素中,然後像這樣在提交處理器上檢索它。

$(document).ready(function(){ 

     $(document).delegate("#submit", "click", function() { 
      var message = $("#comment").val(); 
      message = escape(message); 
      // get agentid for this form 
      var agentid = $(this).closest("form").data("agentid"); 
      var dataString = "agent="+agentid+"&message="+message; 
      $.ajax({ 
       type: "POST", 
       url: "includes/newcomment.asp", 
       data: dataString, 
       success: function(){ 
        console.log(dataString); 
       } 
      }); 
     }); 

     $(".agent img").click(function(){ 
      $(".agent-form").remove(); 
      var agentid = $(this).attr("alt"), 
      // build form HTML (embed agentid into it for later retrieval) 
      var response = "<form method='post' action='' class='agent-form' data-agentid='" + agendid + "'><textarea placeholder='Your Comment' name='comment' id='comment'></textarea><input type='button' value='submit' id='submit' /></form>"; 
      $(response).hide().appendTo(this.parentNode).fadeIn(); 
     }); 
    }); 
+0

我補充說,只是用一個持久'.delegate()'處理程序替換實施方式而不是刪除並重新創建它。 – jfriend00

1

您可以使用jQuery的.unbind()方法..

它的記錄Here

基本上..

$(".agent img").unbind("click"); 
+0

都能跟得上抱歉,沒有工作 – kqlambert