Подтвердить что ты не робот

Каковы некоторые причины для 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>

Почему не работает второй шаг?: (

4b9b3361

Ответ 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), но работает при фокусировке на полях ввода.