2013-02-01 34 views
0

我目前正在开发一个带有Ajax的小型评论系统。我想在按下回车键时解除按键事件(以避免重复的注释),并在成功的ajax调用后重新绑定。jQuery unbind按键事件和成功的Ajax调用后重新绑定

jQuery(".commentDiv textarea").keypress(function(event) { 
    if(event.which == 13 && !event.shiftKey) { 
     event.preventDefault(); 

     var textarea = jQuery(this); 
     var comment = jQuery.trim(textarea.val()); 

     if (!comment.length) { 
      alert("No valid comment."); 
      return false; 
     } 
     var the_data = 
     { 
      ... 
     }; 
     textarea.attr("disabled", "disabled"); 
     textarea.val("Saving comment. Please wait..."); 
     textarea.off('keypress.disabled'); 
     // or textarea.unbind('keypress'); which also works 

     jQuery.post(ajaxurl, the_data, function(sp_response) { 
      textarea.attr("disabled", false); 
      textarea.val(""); 
      textarea.on('keypress.disabled', false); // not working 
     }); 
    } 
}); 

keypress.disabled码从How to bind, unbind and rebind (click) events in JQuery服用。

将keypress事件重新绑定到元素的最简单方法是什么?

回答

2

而不是绑定和解除绑定只是使用一个标志来跳过不想要的执行。在事件开始时设置变量值,并在回调后重置它以准备好下一个事件。

var isAlreadyPressed = false; 
jQuery(".commentDiv textarea").keypress(function(event) { 
    if(isAlreadyPressed) return; 
    isAlreadyPressed = true;  
... 
... 

jQuery.post(ajaxurl, the_data, function(sp_response) { 
      isAlreadyPressed = false; 
      //your code here 
}); 
+0

这比我的方法更容易。谢谢! – Chris

+0

不客气。 – Adil