.focus () «установить фокус на целевой ввод» не будет работать в Firefox - PullRequest
2 голосов
/ 16 марта 2011

У меня есть поле ввода. При определенных условиях я хочу держать пользователя сосредоточенным на поле ввода, когда он нажимает клавишу Tab. По сути, я имитирую функциональность автоматического заполнения окна поиска Google. У меня все работает нормально во всех браузерах, кроме одного, с которым у меня никогда не было проблем ... Firefox!?

Следующий код работает должным образом в IE, Chrome и Safari. Если вы выходите из текстового поля с помощью класса myInput, ваш фокус остается в текстовом поле. Но в Firefox, когда вы нажимаете Tab из текстового поля, вы переходите к следующему текстовому полю. (Это очень упрощенная версия того, что я делаю. Если я смогу заставить это работать, я смогу заставить мой реальный код работать.)

$(document).ready(
    function()
    {               
        $(".myInput").blur
        (
            function()
            {
                $(this).focus();
                $(this).select();
            }
        );      
    }
);

PS. Пожалуйста, не предлагайте исправления с помощью setTimeout (). Спасибо.

Я читал статьи, описывающие, как jQuery имеет .focus (), а javascript имеет .focus () и как они не совпадают. Я понимаю это (я думаю), но я все еще не могу понять, что я делаю неправильно.

ДОБАВЛЕНО ... Я могу заставить его работать таким образом

$(document).ready(
    function()
    {               
        $(".myInput").blur
        (
            function()
            {
                setTimeout("$('.myInput').focus();",1);
            }
        );      
    }
);

Кажется хакерским, но я не могу понять, почему Firefox не устанавливает фокус на размытие. Поэтому, если у кого-то из вас есть ответ, было бы неплохо узнать.

Ответы [ 3 ]

2 голосов
/ 16 марта 2011

Поскольку вы используете jQuery, следует использовать метод .focusout ().

http://api.jquery.com/focusout/

Это отличается от события размытия тем, что оно поддерживает обнаружение потери фокуса от родительских элементов (другими словами, оно поддерживает всплытие событий).

1 голос
/ 16 марта 2011

Мне удалось разрешить мою ситуацию, избежав моего вопроса выше.

Так как я имею дело с клавишей Tab, вместо того, чтобы пытаться переместить фокус обратно в поле, из которого пользователь выделил вкладку (как моя попытка выше), я использовал protectDefault () на клавише Tab. Поэтому фокус никогда не теряется, и мне не нужно беспокоиться о его замене.

displayTextBox.keydown
(
    function(event)
    {           
        // 9 = Tab Key
        if (event.keyCode == "9")
        {
            event.preventDefault();
        }
    }
);

Я не проверял это полностью, но, похоже, он работает до сих пор в FF, Chrome и IE.

0 голосов
/ 16 марта 2011

Попробуйте использовать атрибут html onfocusout

...