У меня есть контейнер div с текстовым полем ввода. Я добавил анимацию фокуса и фокуса на этом прослушивании событий ввода/размытия. Тем не менее, я хочу, чтобы входные данные ведут себя таким образом, что когда я нажимаю в любом месте этого контейнера div, это то же самое, что фокусировка на этом самом входе (таким образом, он не будет перефокусироваться, если вход уже сфокусирован).
Это должно проиллюстрировать проблему
$("#foo1").click(function() {
//WARNING: #foo2 will blur first THEN focus
$("#foo2").focus();
});
$("#foo2").focus(function() {
$("#foo1").addClass("active",1000);
});
$("#foo2").blur(function() {
$("#foo1").removeClass("active",1000);
});
Не повторно применяйте анимацию, если ее уже активная
$(function(){
$("#foo1").click(function() {
//WARNING: #foo2 will blur first THEN focus
$("#foo2").focus();
});
$("#foo2").focus(function() {
//dont reapply
$("#foo1:not(.active)").addClass("active",1000);
});
$("#foo2").blur(function() {
$("#foo1").removeClass("active",1000);
});
});
использовать .clearQueue()
Когда вызывается метод.clearQueue(), все функции в очереди, которые не были выполнены, удаляются из очереди.
JS
$(function(){
$("#foo1").click(function() {
//WARNING: #foo2 will blur first THEN focus
$("#foo2").focus();
});
$("#foo2").focus(function() {
$("#foo1").clearQueue().addClass("active",1000);
});
$("#foo2").blur(function() {
$("#foo1").clearQueue().removeClass("active",1000);
});
});
$("#foo1:not(.active)").addClass("active ohAndAnotherClass",1000);
все еще в силе.