1

我使用 jQuery 1.8.0 编写了一个自定义分页方案。我将事件处理程序绑定到后退和前进按钮。要在第 1 页禁用后退按钮,我使用 .off() 函数来禁用绑定。当我向上翻页时,我在按钮上调用 .on() 以再次启用绑定。当我三次更改事件绑定的开/关状态时,就会出现问题。之后,该事件将不再触发。

下面是我的代码的精简版本。这将说明我的问题。

这就是事件。后退按钮的 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 回答