0

私は現在、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コードは、JQueryのイベントをバインド、バインド解除、および再バインド(クリック)する方法から取得されます。

keypressイベントを要素に再バインドする最も簡単な方法は何ですか?

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 に答える