0

我目前正在开发一个带有 ajax 的小型评论系统。我想在按下回车键时取消绑定 keypress 事件(以避免重复注释)并在成功的 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

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

4

1 回答 1

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
 });
于 2013-02-01T15:08:51.607 回答