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

0

У меня есть контейнер 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);
    });
Теги:

2 ответа

1
Лучший ответ

Не повторно применяйте анимацию, если ее уже активная

$(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);
    });

});

См.: http://jsfiddle.net/g5c7d/6/

  • 0
    Это работает, но в случае изменения нескольких классов на один фокус, мне придется соответствующим образом перенастроить селектор.
  • 0
    Да, вам придется обновить код, если вы измените свои требования, но $("#foo1:not(.active)").addClass("active ohAndAnotherClass",1000); все еще в силе.
1

использовать .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);
        });


});

DEMO

  • 0
    Распределена ли очередь между элементами? Что если в очереди находятся другие совершенно не относящиеся к делу функции задержки, foo1.clearQueue очистит эти функции?
  • 0
    @ user1542639 yes clearQueue удалит все предыдущие функции
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню