jQuery unbind keypress事件并在成功调用ajax之后重新绑定

时间:2013-02-01 15:04:14

标签: jquery keypress

我目前正在开发一个带有ajax的小评论系统。我想在按下回车键时取消绑定按键事件(以避免重复注释)并在成功调用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事件重新绑定到元素的最简单方法是什么?

1 个答案:

答案 0 :(得分: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
 });