1

jQuery1.8.0を使用してカスタムページングスキームを作成しました。イベントハンドラーを戻るボタンと進むボタンにバインドしています。1ページ目にあるときに戻るボタンを無効にするために、.off()関数を使用してバインディングを無効にしています。ページを開くときに、ボタンで.on()を呼び出して、バインディングを再度有効にします。イベントバインディングのオン/オフ状態を3回変更すると、問題が発生します。その後、イベントは発生しなくなります。

私のコードの簡略版は次のとおりです。これは私の問題を説明します。

これがイベントです。戻るボタンのIDはprevPageLinkです。

$("#prevPageLink").click( function() {
  // Decrement the current page
  global_currentPage--;

  // Check to see if first or last page clicked
  handlePaginationButtonState();

  // Decrement the results indicies
  startResultsIndex -= global_totalResultsPerPage;
  endResultsIndex = startResultsIndex + global_totalResultsPerPage - 1;

  getNextResults();  
});

関数handlePaginationButtonStateは、戻るボタンと進むボタンのオンとオフを切り替える作業を行います。

function handlePaginationButtonState() {

  if (global_currentPage == 1) {
    $("#prevPageLink").parent().attr('class', 'disabled');
    $("#prevPageLink").off('click');
  } else {
    $("#prevPageLink").parent().attr('class', 'enabled');
    $("#prevPageLink").on('click');
  }  // the rest of this function takes care of the numbered and right page buttons

したがって、Webアプリが最初に結果を返すときに、最初の10個の結果が読み込まれます。私が次のことをした場合:

  1. 次のページ(2ページへ)-バインディングがオンになっています
  2. 前のページ(1ページに戻る)-バインディングがオフになっています
  3. 次のページ(2ページへ)-入札がオンになりました

前のページに戻ることができません。1ページに戻ります。prePageLinkボタンが応答しなくなりました。次のページボタンと結果リストの最後、および番号付きのページボタンを使用してこれをテストしました。.on()または.off()関数を使用してバインディングがオンまたはオフになっている場合、バインディングはイベントに応答しなくなります。

何か案は?私は完全に困惑しています。

4

1 に答える 1

2

「.on()または.off()関数を使用してバインディングがオンまたはオフになっている場合」

$("#prevPageLink").on('click')十分なパラメータを指定しなかったため、実際には何もしません。この.on()メソッドは、以前に削除されたイベントハンドラーをオンにせず、新しいイベントハンドラーをバインドするため、イベントが発生したときに呼び出される関数を指定する必要があります。言い換えると:

$("#prevPageLink").on('click', function() { /* some code */ });
/// does the same thing as:
$("#prevPageLink").click(function() { /* some code */ });

この.off()メソッドは、以前にバインドされたハンドラーを削除しますが、一時的に無効にすることはありません。

同じ関数を再バインドし続ける場合は、無名関数を使用しないでください。

function myClickHandler() {
    // your code here
}
$("#prevPageLink").on('click', myClickHandler);
// remove it:
$("#prevPageLink").off('click');
// add it again:
$("#prevPageLink").on('click', myClickHandler);

詳細についてはドキュメントをお読みください。.on()

ただし、ハンドラーを削除して再バインドするよりも、ハンドラーを常にそのままにして、既に最初のページにいるかどうかをテストする方が簡単だと思います。関数の先頭に次のようなものを追加してください。 :

if (global_currentPage === 1)
   return false;
于 2012-10-06T00:27:08.667 に答える