2015-12-09 7 views
1

Моя цель - открыть элемент input во всплывающем окне и сфокусировать этот ввод.Поведение weird focus()

Так логично, я пробовал $('#input').focus(), $('#input').first().focus() и $('#input')[0].focus(), но они не работают; но когда я меняю вкладку и возвращаюсь к своей вкладке, элемент input находится в фокусе. Кто-нибудь видел что-то подобное? Или знаете, как это объяснить или даже лучше, знаете, как это исправить ...

P.S. Для комментариев: да, это единственный вход с идентификатором «input» на моей странице, и да, у меня есть элемент input с идентификатором «input» на моей странице, и да, код для фокусирующих элементов вызывается после добавления input к дому.

+1

Вызов '.focus()' из какого-то другого обработчика событий (например, что-то, что переключает вкладки) может быть проблемой. По моему опыту, вы можете решить это, завернув вызов фокуса в обработчике тайм-аута с очень коротким временем таймаута. И '$ (" # input "). Focus()' все, что вам нужно (в обработчике тайм-аута). – Pointy

+0

P.P.S: и нет, вы не предоставили никаких MCVE :) Но я думаю, что Уокей прав. Еще одна вещь, скрытый элемент не может быть сфокусирован, может быть, это более актуально тогда, чтобы сфокусировать его, как только показано. –

+1

См. Также [Почему иногда используется setTimeout (fn, 0)?] (Http://stackoverflow.com/questions/779379/why -is-settimeoutfn-0-иногда-полезно) –

ответ

0

Из моего комментария выше, вот что я предлагаю:

setTimeout(function() { 
    $("#input").focus(); 
}, 0); 

Это расположение позволяет текущий закончить нить событий, включая любые «родные» действия браузер хочет выполнить. Тайм-аут может быть запущен в контексте, когда единственным изменением состояния страницы будет настройка фокуса.

1
window.load = function(){$("#input").focus();} 

В основном window.load это событие, которое срабатывает только тогда, когда все элементы страницы загружаются.

Вы можете добавить код выше в пределах страницы. Предпочтительно на последней странице в пределах <script type="javascript"> </script>. Итак, после того, как все элементы загружены, он установит фокус на поле ввода.

+1

С объяснением хороший ответ станет полезным ответ. – wmk

+0

В основном windows.load - это событие, которое запускается только при загрузке всех элементов страницы. Вы можете добавить код выше в пределах страницы. Предпочтительно на последней странице в скрипте javascript. Поэтому после того, как все элементы будут загружены, он установит фокус на поле ввода. –

+0

Я добавил ваш комментарий к ответу, используя функцию «edit». Спасибо за объяснение! – wmk

 Смежные вопросы

  • Нет связанных вопросов^_^