JQuery Фокус не работает на Firefox
Я уже несколько раз тестировал этот другой вопрос, когда заметил что-то очень своеобразное. FF4/5 не запускает событие focus
jQuery. Другой вопрос, который можно было бы считать дубликатом, был закрыт и принят без реального ответа.
Для самого вопроса я попробовал следующий простой бит кода:
$('#target').focusout(function() {
$(this).focus();
});
Он хорошо работает в Chrome и в IE, но он не работает на FF. Здесь jsFiddle для ленивых среди нас.
Может ли кто-нибудь объяснить это поведение? Или это известная ошибка?
Ответы
Ответ 1
Я думаю, что я наткнулся на это раньше, и, если я правильно помню, это, казалось, какая-то проблема повторного входа. Мое впечатление заключалось в том, что, поскольку FF уже находится в процессе перехода к фокусу, он не позволит вам инициировать другой переход на фокус. Я считаю, что мой обход был чем-то вроде
$('#target').focusout(function() {
setTimeout(function() {
$(this).focus();
}, 0);
});
Ответ 2
руководство говорит aboult .focus()
call
Этот метод является ярлыком для .trigger('focus')
и .trigger()
тема
Хотя .trigger() имитирует активацию события, в комплекте с синтезированным объектом события, он не идеально реплицирует естественное событие.
Итак, как я понимаю, вызов $(this).focus();
должен инициировать событие OnFocus (если он привязан к объекту), но не гарантируется, чтобы фактически установить/изменить сфокусированный объект.
Ответ 3
Это работало для меня в Firefox 38. Мне нужно было протестировать разную задержку ms. Благодаря комментарию @camaleo.
$(document).ready(function() {
setTimeout(function() { $('#myid').focus(); }, 100);
});
Ответ 4
Теперь фокус теперь работает в последнем Firefox без необходимости использования функции setTimeout.
Если вы также хотите выбрать поле ввода, вам нужно будет использовать функцию .select(), но как document.execCommand('SelectAll'); похоже, не работает и в Firefox.
Итак, если поле ввода сначала сфокусировано, а затем выбрано, вы можете его скопировать или сделать с ним что угодно.
В моем случае использования я должен был скопировать URL из поля ввода, если кто-то нажал на кнопку копирования:
$(".copyURL").click(function(){
$(this).prev().focus().select();
document.execCommand("Copy",false,null);
});
Надеюсь, это поможет любому, кто ищет эту проблему!