Как установить фокус на поле скрытого текстового поля с помощью JavaScript?

Как я могу установить фокус на скрытый элемент текстового поля?

I tried this:

document.getElementById("textControl_fd_component_JSON_TASK_NStext64").focus(); 

Но это не работает здесь. Какalert(document.activeElement.id); возвращаетсяnull в этом случае.

Если я сделаю это поле видимым, приведенный выше скрипт будет работать нормально. Есть идеи, где я ошибаюсь?

 Drake Hampton01 июн. 2012 г., 15:53
Я думаю, вы только что доказали, что не можете сосредоточиться на скрытом поле, что имеет смысл. Можете ли вы рассказать, почему вы хотите это сделать? Там может быть лучший подход.

Ответы на вопрос(4)

Используя ответ Apsillers, моя установка для этой же ситуации включала:

a parent div with position:relative; a child form element position:absolute; z-index:0; opacity:0; filter:alpha(opacity=0); a second child element position:absolute; z-index: (value > 0) (positioned to cover the transparent input).

Aspillers & APOS; Ответ правильный, учитывая заданный вопрос, но я хотел бы привести практический пример того, когда это необходимо.

В частности, элементы формы могут быть скрыты, если вы используете какой-либо сценарий / плагин, который делает "причудливым" входы (т. е. радио / контрольные элементы, выбор элементов). Но если ваш скрипт или плагин написаны плохо, это может исключить доступность клавиатуры. Сохранение потока формы, позволяя фокусироваться на всех элементах, может сэкономить много головной боли для пользователей сайта.

Вы можете добавить несколько js, если вам нужен обходной путь и вы не можете изменить непрозрачность attr.

/* bind a click handler to your trigger */
jQuery('#your-search-trigger').on('click', function searchIconEventhandler (event) {
    /* in case your field is fading, cheat a little (check css transition duration) */
    setTimeout ( function timeoutFunction () {
        /* show the cursor */
        jQuery('#your-search-input').focus();
    }, 100);
});

Я не думаю, что это разрешено, по крайней мере, в IE. Я получил эту информацию отФокусная страница jQuery.

Если вам действительно нужно это сделать, сделайте поле прозрачным, а не скрытым:

opacity:0;
filter:alpha(opacity=0);

В качестве альтернативы, если вы хотите убедиться, что пользователь случайно не щелкнул по нему, просто поместите ввод внутри элемента с

width: 0;
overflow: hidden;

HoweverЕсть, безусловно, лучший способ сделать то, что вы хотите, может быть, используяkeydown/keypress События.

 21 янв. 2013 г., 20:30
Большое спасибо, вы только что спасли меня от нескольких часов борьбы :)
 01 мар. 2018 г., 19:00
Спасибо за это. К сожалению этоis лучший способ получить вклад.keydown/keypress события не сокращают его для ввода IME.
 08 мар. 2014 г., 02:28
Это хорошо, в идеале было быfocusable атрибут, который вы могли бы надеть неиспользованным (display: none;) DOM-узлы, которые позволили бы им получить фокус (независимо от того, существует ли тогда какой-либо javascript для обработки этого и сделать что-то видимым для пользователя).
 23 нояб. 2016 г., 15:32
Есть ли где-нибудь официальная ссылка на это поведение? Это относится кvisibility: hidden, тоже? Или простоdisplay: none?

Ваш ответ на вопрос