У меня есть тег привязки <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 не достаточно действительно проста, чтобы я понял.
Я бы просто добавил проверку, сначала анимируется ли она:
$('a.next').click(function() {
if (!$(this).is(":animated")) {
// do stuff
}
});
Когда вы повторно связываете событие щелчка, вы начинаете все сначала. Вам необходимо предоставить функцию, которая будет обрабатывать события. jQuery не запоминает их за вас после того, как вы вызываете «unbind».
В данном конкретном случае все немного сложнее. Проблема в том, что, когда вы запускаете эти анимации, вы запускаете серию действий, которые управляются таймером. Таким образом, отвязка и повторная привязка обработчика щелчка внутри самого обработчика щелчка действительно ни к чему не поможет. Что может помочь (при условии, что вы не хотите решать проблему с помощью трюка is (": animated")
), так это отвязать обработчик, а затем повторно связать его в "finish "обратный вызов из вашей анимации.
Когда вы настраиваете обработчик «щелчка» в первую очередь, вы можете отделить объявление функции от вызова «click ()»:
var handler = function() {
$(this).whatever();
};
$('a.next').click(handler);
Затем, если вы в конечном итоге захотите отменить привязку / повторную привязку, вы можете повторить этот вызов, чтобы «щелкнуть» и таким же образом обратиться к функции «обработчик».