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

Bun*_*gle 12 javascript jquery binding event-handling javascript-events

jQuery文档.toggle()方法规定:

提供.toggle()方法是为了方便起见.手动实现相同的行为是相对简单的,如果.toggle()中内置的假设证明是有限的,这可能是必要的.

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

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

$('a').toggle(function() {
  alert('odd number of clicks');
}, function() {
  alert('even number of clicks');
});
Run Code Online (Sandbox Code Playgroud)

做这个:

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

我没有测试后者,但我怀疑它会起作用.这是做这样的事情的最佳方式,还是有更好的方式让我失踪?

谢谢!

Alc*_*nja 36

看起来像是一种合理的方式...我只是建议您使用jQuery的数据存储实用程序,而不是引入额外的变量(如果您想跟踪一大堆链接,这可能会变得很头疼) .所以基于你的例子:

$('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);
});
Run Code Online (Sandbox Code Playgroud)