3

live()カレンダーのクリック イベントに関数が割り当てられています。カレンダーの月を切り替えると、標準が新しく表示された日にバインドされないため、クリック イベントが必要.click()です。選択したカレンダーの日付に基づいて AJAX がトリガーされます。

前のリクエストが完了するまで、ユーザーがこれ以上 AJAX を起動できないようにする必要があるため、クリック リスナーのバインドをすぐに解除してこれを実現しました.die('click')。ただし、eventWrap クリック リスナーを元の状態に戻すことはできません$('.eventWrap').live('click')

私の問題の解決策はありますか?

$('.eventWrap').live('click', function() {
     $('.eventWrap').die('click');

     do ajax stuff

     //bring the .eventWrap click listener back to life
     //$(.eventWrap).live('click'); does not work as I had hoped

}
4

3 に答える 3

3

クリックしてクラスを追加するだけで、クラスが存在しない場合にのみ ajax を実行できます

$('.eventWrap').live('click', function() {
    if( ! $('.waitingForAjax').length ){
        $('.eventWrap').addClass('waitingForAjax');

         do ajax stuff- use removeClass() within the ajax success handler
    } else{
        alert('Waiting for last ajax to complete');
    }   
});

jQuery 1.7 を使用している場合on()の代わりに使用live()

于 2012-06-04T04:16:04.233 に答える
2

あなたのコードによると

live は非推奨なので、使用.on()して.off()

$('.eventWrap').on('click', function() {
     $('.eventWrap').off('click');

});

そのオフイベントの使用を再バインドするには

$('.eventWrap').on('click');

ページの読み込み後に DOM に追加する場合

.eventWrapページの読み込み後に dom に追加する場合は、デリゲート イベントを使用する必要があります

 $('#container').on('click', '.eventWrap',function() {
     $('#container').off('click', '.eventWrap');
});

そのイベントのバインドを解除するには

     $('#container').off('click', '.eventWrap');

ここでは、ページの読み込み時に DOM に属する#containerのコンテナーを指します。.eventWrapそのコンテナーを指す他のセレクターがある場合があります.eventWrap

しかし、リファクタリングを使用する方が良いでしょう

    function offmyevent() {
       $('#container').off('click', '.evetWraooer');
    }


    function offmyevent() {
       $('#container').on('click', '.evetWraooer');
    }

   $('#container').on('click', '.eventWrap',function() {
         offmyevent();
         callMyAjax();
   });

したがって、ajax呼び出しの問題について

function callMyAjax() {
  $.ajax({
      url: '',
      data: '',
      method: '...',
      success: function() {
         onmyevent(); // 
     }
  })
于 2012-06-04T04:09:37.020 に答える
1

ハンドラーを有効on()にしてoff()イベントを行うには、関数も渡す必要があります。

$("#container").on("click", ".eventWrap", eventWrapClicked);

function eventWrapClicked(){
    $("#container").off("click", ".eventWrap", eventWrapClicked);

   //Do your AJAX -- on success, reapply the clickhandler.
   // $("#container").on("click", ".eventWrap", eventWrapClicked);
}
于 2012-06-04T04:18:46.133 に答える