javascript - 替代支持 eventData 的 jQuery .toggle() 方法?

标签 javascript jquery event-handling jquery-events

jQuery documentation对于 .toggle() 方法状态:

The .toggle() method is provided for convenience. It is relatively straightforward to implement the same behavior by hand, and this can be necessary if the assumptions built into .toggle() prove limiting.

.toggle 中内置的假设已证明对我当前的任务有限制,但文档没有详细说明如何实现相同的行为。我需要将 eventData 传递给提供给 toggle() 的处理函数,但似乎只有 .bind() 支持这个,不支持.toggle().

我的第一个倾向是使用对单个处理程序函数来说是全局的标志来存储点击状态。换句话说,而不是:

$('a').toggle(function() {
  alert('odd number of clicks');
}, function() {
  alert('even number of clicks');
});

这样做:

var clicks = true;
$('a').click(function() {
  if (clicks) {
    alert('odd number of clicks');
    clicks = false;
  } else {
    alert('even number of clicks');
    clicks = true;
  }
});

我还没有测试后者,但我怀疑它会起作用。这是执行此类操作的最佳方法,还是我缺少更好的方法?

最佳答案

这似乎是一种合理的方式...我只是建议您使用 jQuery 的 data storage实用程序而不是引入额外的变量(如果您想跟踪一大堆链接,这可能会让人头疼)。所以根据你的例子:

$('a').click(function() {
  var clicks = $(this).data('clicks');
  if (clicks) {
    alert('odd number of clicks');
  } else {
    alert('even number of clicks');
  }
  $(this).data("clicks", !clicks);
});

关于javascript - 替代支持 eventData 的 jQuery .toggle() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2459153/

相关文章:

javascript - 使用 JavaScript 遍历数据表中的行

javascript - 如何防止子级点击事件冒泡到父级?

windows-phone-7 - 在 Windows Phone 7 的列表框中捕获 "Click"的正确事件是什么?

javascript - 无法让这些 javascript if 语句发挥作用

java - 如何使标签在单击时移动?

c# - 为什么事件处理程序之前总是有一个 + 号?

javascript - 在 Javascript 中,子节点因其父节点而受到影响

javascript - 在 firefox 扩展中仅使用 js 截屏

javascript - jQuery 中的 setInterval 发生得太快

javascript - bootstrap 和 jquery 模式失败