JavaScript задає фокус на елементі форми HTML


331

У мене є веб-форма з текстовим полем. Як я можу встановити фокус до текстового поля за замовчуванням?

Щось на зразок цього:

<body onload='setFocusToTextBox()'>

так чи може мені хтось у цьому допомогти? Я не знаю, як встановити фокус на текстове поле за допомогою JavaScript.

<script>
function setFocusToTextBox(){
//What to do here
}
</script>

21
Настільки ж просто document.getElementById('your_text_box_id').focus();.
Теему

Відповіді:


575

Зробити це.

Якщо ваш елемент щось подібне ..

<input type="text" id="mytext"/>

Ваш сценарій був би

<script>
function setFocusToTextBox(){
    document.getElementById("mytext").focus();
}
</script>

3
Вам доведеться сканувати документ за допомогою інших частин веб-API (наприклад Document.forms, Document.getelementsByTagNameабо Node.childNodes), або покладатися на відому структуру документа або шукати певні властивості елемента.
петерф

40
Або очевидну відповідь ... дайте йому посвідчення;)
Відповідне

4
Я б радив не використовувати ідентифікатор, оскільки він перевищений. Замість цього використовуйте ім'я або навіть клас. У цьому випадку ви використовуєте document.querySelector ("[name = 'myText']") або document.querySelector (". MyText"), щоб отримати посилання на елемент введення.
Кріс Лав

12
@ChrisLove Цікава порада. Чому ідентифікатор "перерахований вище" і в чому саме проблема? Простіше, точніше і код, щоб знайти його, буде трохи швидше, з ідентифікатором. Мені це здається найбільш очевидним і розумним, що можна зробити - якщо це можливо.
PandaWood

4
@ChrisLove це не переназначає селектор CSS, він встановлює атрибут HTML ID - специфіка є проблемою в тому, як CSS обробляє розбір селекторів DOM, а не проблема з тим, як атрибути ID та класу працюють у HTML. Не доцільно використовувати ті самі селектори DOM для приєднання CSS, як і для того, щоб приєднати JS, це означає, що ви можете підтримувати диференційованість, яку ви описуєте
Тоні Лей

142

Для чого це варто, ви можете використовувати autofocusатрибут у сумісних браузерах HTML5. Працює навіть на IE, починаючи з версії 10.

<input name="myinput" value="whatever" autofocus />

51
Майте на увазі, це працює лише для налаштування фокусу, коли сторінка спочатку завантажується; його не можна використовувати для встановлення фокусу пізніше у відповідь на введення.
Мартін Керні

Боюся, що атрибут автофокусування не сумісний, якщо IOS Safari ( caniuse.com/#search=autofocus ), а .focus () просто несумісний з Opera Mini ( caniuse.com/#search=focus )
lfrodrigues

3
Зауважте, що якщо ви намагаєтесь зосередитись з консолі, то це неможливо!
Або Чобан

65

Зазвичай, коли ми зосереджуємося на текстовому полі, ми також повинні прокручувати подання

function setFocusToTextBox(){
    var textbox = document.getElementById("yourtextbox");
    textbox.focus();
    textbox.scrollIntoView();
}

Перевірте, чи допомагає це.


2
Це може бути справжній головний біль на меншому екрані, якщо поле вимкнеться з екрана :-)
Toni Leigh

Якщо у вас зафіксовано смужку заголовка, можливо, вам доведеться скористатися textbox.scrollIntoView (помилково). Це просто встановлює елемент в нижній частині, а не вгорі.
DeadlyChambers

30

Якщо ваш код:

<input type="text" id="mytext"/>

І якщо ви використовуєте JQuery, ви можете також використовувати це:

<script>
function setFocusToTextBox(){
    $("#mytext").focus();
}
</script>

Майте на увазі, що спочатку потрібно намалювати дані $(document).ready()


11
Я спростував це, оскільки віддаленого впливу jQuery на базове питання віддалено немає. ОП хотіла залишатися суто JavaScript
Fallenreaper

11
Ну, у вас є причина, я пішов не так, але я думаю, що це все одно корисно.
Річард Ребеко

4
Я підтримую це, оскільки в проектах, де jQuery вже використовується і ви є елементами вибору jQuery, краще бути послідовним, а не використовувати ванільну JS.
парадит

8
@Fallenreaper Downvotes є для egregiously sloppy, no-effort-expended post, or an answer that is clearly and perhaps dangerously incorrect, згідно з довідковим центром stackoverflow . Я не знаходжу цього ніде поблизу цих категорій. Допомога не обмежується ОП, чи не так?
Геллі Енн

@GellieAnn Хоча це відповідь, вона лежить поза межами питання про ОП. Є причина, чому він використовує ванільний javascript, і, хоча ви можете згадати інші рамки та дати покажчики або підказки, щоб призвести до одного, і дати міркування, чому ви все-таки повинні вирішити відповідь у межах заданого питання. Тому я стою поруч зі своєю головою.
Fallenreaper

20

Для звичайного Javascript спробуйте наступне:

window.onload = function() {
  document.getElementById("TextBoxName").focus();
};

3

Я раніше просто використовував це:

<html>
  <head>
    <script type="text/javascript">
      function focusFieldOne() {
        document.FormName.FieldName.focus();
      }
    </script>
  </head>

  <body onLoad="focusFieldOne();">
    <form name="FormName">
      Field <input type="text" name="FieldName">
    </form>
  </body>
</html>

Однак, ви можете просто використовувати атрибут автофокусування в HTML 5.

Зверніть увагу: я хотів оновити цю стару нитку, показуючи запитаний приклад плюс новіше, легше оновлення для тих, хто все ще читає це. ;)


1

Як згадувалося раніше, document.forms також працює.

function setFocusToTextBox( _element ) {
  document.forms[ 'myFormName' ].elements[ _element ].focus();
}

setFocusToTextBox( 0 );
// sets focus on first element of the form

Форма AFAIK не має атрибута "name"
Marecky

Форми вже давно мають "імена", а в HTML5 вони все ще є. Дивіться w3.org/TR/html5/forms.html#the-form-element
Mac


0

window.onload - спочатку поставити фокус onblur - це поставити фокус під час клацання за межами текстової області, або уникати розмиття області тексту

    <textarea id="focus"></textarea>
    <script>
     var mytexarea=document.getElementById("focus");
    window.onload=function()
    {

    mytexarea.focus();

    }

mytextarea.onblur=function(){

mytextarea.focus();

}
    </script>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.