一尘不染

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

javascript

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

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

.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;
  }
});

我尚未测试后者,但我怀疑它会起作用。这是做这样的事情的最好方法,还是我想念的更好的方法?

谢谢!


阅读 271

收藏
2020-05-01

共1个答案

一尘不染

似乎是一种合理的方法…我只是建议您使用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);
});
2020-05-01