Каковы некоторые причины для jquery.focus() не работает?
Некоторые мысли состоят в том, что ELEMENT_ID.focus() находится внутри divs, которые скрыты в определенные моменты времени.
Это должна быть легкая проблема для решения - но я боюсь: (
*** код работает нормально - текстовое поле не фокусируется при загрузке страницы.
ШАГ 1 [РЕШЕНО]
JAVASCRIPT:
$("#goal-input").focus();
$('#goal-input').keypress(function(event){
var keycode = (event.keyCode ? event.keyCode : event.which);
if(keycode == '13') {
etc, etc, etc
}
HTML
<input type="text" id="goal-input" name="goal" />
[ШАГ2]
JAVASCRIPT:
if (goal) {
step1.fadeOut('fast', function() {
step1.hide();
step2.fadeIn('fast');
etc, etc
HTML:
<div id="step-2">
<div class="notifications">
</div>
<input type="text" id="name" name="name" placeholder="Name" />
<script type="text/javascript">
$(function(){
$("#name").focus();
});
</script>
Почему не работает второй шаг?: (
Ответы
Ответ 1
Вам нужно либо поместить код под HTML или загрузить, если использовать событие загрузки документа:
<input type="text" id="goal-input" name="goal" />
<script type="text/javascript">
$(function(){
$("#goal-input").focus();
});
</script>
Update:
Переключение divs не вызывает событие загрузки документа, поскольку все уже загружено. Вам нужно сфокусировать его при переключении div:
if (goal) {
step1.fadeOut('fast', function() {
step1.hide();
step2.fadeIn('fast', function() {
$("#name").focus();
});
});
}
Ответ 2
У меня возникли проблемы с запуском фокусировки на элемент (ввод формы), который переходил на страницу. Я нашел, что это было исправлено, вызвав событие фокуса изнутри setTimeout без задержки на нем. Насколько я понимаю (от, например, этот ответ), это задерживает эту функцию до тех пор, пока не будет завершена текущая очередь выполнения, поэтому в этом случае она задерживает событие фокусировки до перехода завершено.
setTimeout(function(){
$('#goal-input').focus();
});
Ответ 3
Не забывайте, что поле ввода должно быть видимым первым, после чего вы сможете сфокусировать его.
$("#elementid").show();
$("#elementid input[type=text]").focus();
Ответ 4
Попробуйте что-то подобное, когда вы применяете фокус таким образом, если элемент скрыт, он не будет вызывать ошибку:
$("#elementid").filter(':visible').focus();
Это может иметь смысл сделать элемент видимым, хотя для этого потребуется код, специфичный для вашего макета.
Ответ 5
Я обнаружил, что focus
не работает, когда вы пытаетесь сосредоточиться на текстовом элементе (например, уведомление div
), но работает при фокусировке на полях ввода.