Альтернатива .toggle jQuery () метод, который поддерживает eventData?

Документация 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;
  }
});

Я не протестировал последнего, но я подозреваю, что это работало бы. Действительно ли это - лучший способ сделать что-то вроде этого или является там лучшим способом, которым я отсутствую?

Спасибо!

12
задан Bungle 17 March 2010 в 03:06
поделиться

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);
});
36
ответ дан 2 December 2019 в 03:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: