0

こんにちは、私はこのjQueryコードを持っています:

$('#myid').click(function() {   

    var data = {
            action: 'xxx_ajax_response',
            xxx_ajax_response_nonce: the_ajax_script.xxx_ajax_response_nonce    
        };      
    //do an ajax request

    $.post(the_ajax_script.ajaxurl, data, function(response) {

        $(this).next().slideToggle();   

    });

    //return false;
});

AJAX関数がまだ実行/ロードされているときにクリックイベントを一時的に無効にする方法は? しかし、AJAX の読み込みが成功した後にクリックを復元しますか? クラスを変更してみましたが、id セレクターを使用していて機能しません。簡単な方法はありますか?ありがとうございました。

4

2 に答える 2

1

コールバック関数の外でフラグ変数を設定するだけですclick:

var _doing_ajax = false;
$('#myid').click(function() {   
    if ( _doing_ajax ) {
        return false;
    }
    var data = {
            action: 'xxx_ajax_response',
            xxx_ajax_response_nonce: the_ajax_script.xxx_ajax_response_nonce    
        };      

    _doing_ajax = true;
    //do an ajax request
    $.post(the_ajax_script.ajaxurl, data, function(response) {

        $(this).next().slideToggle();   
        _doing_ajax = false;
    });

    //return false;
});

基本的に、デフォルト値を に設定して、新しいローカル変数を定義しますfalse。コールバック関数の開始時に.click()、flag 変数の値をチェックします。true の場合は false を返します。AJAX リクエストを開始する直前に、変数を に設定しますtrue。AJAX 呼び出しが完了したら、変数をfalse再び に設定して、それ以上クリックすると AJAX が再び有効になるようにします。

于 2012-12-04T10:18:08.197 に答える
0

jQuery unbindを使用して、ロード中に要素からイベントを削除し、データのロード後に再度バインドすることができます。jQuery.post()bind内部に関数を記述しますsuccess$.post()

jQueryでイベント ハンドラーを削除する最良の方法は?

于 2012-12-04T10:46:17.917 に答える