jQuery unbind събитие натискане на клавиш и повторно свързване след успешно ajax-извикване

В момента разработвам малка система за коментари с ajax. Искам да развържа събитието за натискане на клавиш, когато е натиснат клавишът enter (за да избегна дублиращи се коментари) и да го обвържа отново след успешно 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 кодът е взет от Как да обвържа, развържа и преобвържа (щракване) събития в JQuery.

Кой е най-лесният начин за повторно свързване на събитието натискане на клавиш към елемента?


person Chris    schedule 01.02.2013    source източник


Отговори (1)


Вместо обвързване и развързване просто използвайте флаг, за да пропуснете нежеланото изпълнение. Задайте стойността на променливата в началото на събитието и я нулирайте при последващо обратно извикване, за да се подготвите за следващото събитие.

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
 });
person Adil    schedule 01.02.2013
comment
Това е много по-лесно от моя подход. Благодаря! - person Chris; 01.02.2013