Как я “снова переплетаю” событие щелчка после того, как развязывают ('нажимают')?

У меня есть тег привязки <a class="next">next</a> превращенный в "кнопку". Иногда, этот тег должен быть скрыт, если нет ничего нового для показа. Все хорошо работает, если я просто скрываю кнопку с .hide () и вновь отображаю его с .show (). Но я хотел к использованию .fadeIn () и .fadeOut () вместо этого.

Проблема, которую я имею, состоит в том, что, если пользователь нажимает на кнопку во время анимации постепенного исчезновения, она может вызвать проблемы с логикой, у меня есть всем заправляние. Решение, которое я нашел, состояло в том, чтобы развязать событие щелчка от кнопки после того, как исходная функция щелчка начинается, и затем снова переплетите его после того, как анимация завершена.

$('a.next').click(function() {
    $(this).unbind('click');
    ...
    // calls some functions, one of which fades out the a.next if needed
    ...
   $(this).bind('click');
}

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

Я - парень jQuery-самоучка, таким образом, некоторым высокоуровневым вещам нравится, развязывают () и связывают (), находятся вне моего понимания, и документация jQuery не достаточно действительно проста, чтобы я понял.

13
задан Ben 7 April 2010 в 14:19
поделиться

2 ответа

Я бы просто добавил проверку, сначала анимируется ли она:

$('a.next').click(function() {
    if (!$(this).is(":animated")) {
        // do stuff
    }
});
15
ответ дан 1 December 2019 в 22:06
поделиться

Когда вы повторно связываете событие щелчка, вы начинаете все сначала. Вам необходимо предоставить функцию, которая будет обрабатывать события. jQuery не запоминает их за вас после того, как вы вызываете «unbind».

В данном конкретном случае все немного сложнее. Проблема в том, что, когда вы запускаете эти анимации, вы запускаете серию действий, которые управляются таймером. Таким образом, отвязка и повторная привязка обработчика щелчка внутри самого обработчика щелчка действительно ни к чему не поможет. Что может помочь (при условии, что вы не хотите решать проблему с помощью трюка is (": animated") ), так это отвязать обработчик, а затем повторно связать его в "finish "обратный вызов из вашей анимации.

Когда вы настраиваете обработчик «щелчка» в первую очередь, вы можете отделить объявление функции от вызова «click ()»:

var handler = function() {
  $(this).whatever();
};
$('a.next').click(handler);

Затем, если вы в конечном итоге захотите отменить привязку / повторную привязку, вы можете повторить этот вызов, чтобы «щелкнуть» и таким же образом обратиться к функции «обработчик».

6
ответ дан 1 December 2019 в 22:06
поделиться
Другие вопросы по тегам:

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