Як ви автоматично встановлюєте фокус на текстовому полі, коли веб-сторінка завантажується?


Відповіді:


245

Якщо ви використовуєте jquery:

$(function() {
  $("#Box1").focus();
});

або прототип:

Event.observe(window, 'load', function() {
  $("Box1").focus();
});

або звичайний javascript:

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

хоча майте на увазі, що це замінить інші на оброблювачах завантаження, тому шукайте addLoadEvent () в Google для безпечного способу додавання обробників завантаження, а не заміни.


3
Чому б не поставити обробники на елемент кузова? Будь-яка довідка? Спасибі
Олександр Торстлінг

7
Тому що відокремити javascript від HTML набагато чистіше. Вам слід додати сценарій поведінки до візуальних елементів у вашому HTML.
Бен Шейрман

94

У HTML є autofocusатрибут для всіх форм форм. У ній є хороший підручник у Dive Into HTML 5 . На жаль, на даний момент не підтримується версіями IE менше 10.

Щоб використовувати атрибут HTML 5 і повернутися до параметра JS:

<input id="my-input" autofocus="autofocus" />
<script>
  if (!("autofocus" in document.createElement("input"))) {
    document.getElementById("my-input").focus();
  }
</script>

Не потрібні обробники jQuery, onload або подій, оскільки JS знаходиться нижче елемента HTML.

Редагувати: ще одна перевага полягає в тому, що він працює у вимкненому JavaScript у деяких браузерах, і ви можете видалити JavaScript, коли не хочете підтримувати старі браузери.

Редагувати 2: Firefox 4 тепер підтримує autofocusатрибут, просто залишаючи IE без підтримки.


3
Що з autofocus="aufofocus"? Всі номери ви при умови , що просто сказати , щоб додати атрибут: autofocus.
Геррат

6
Ще в часи XHTML та HTML4 було звичайно робити attribute="value"булеві атрибути. HTML5 з'явився разом із "синтаксисом порожнього атрибута", і ми втратили надмірність. Тепер ми можемо зробити<input checked disabled autofocus data-something>
dave1010

Мені подобається такий підхід ... Цей код належить до введення ... позбудьтеся введення та буму, пов'язаний код є саме там ... Ми так втрачаємось сьогодні ... Йдемо повне коло зараз, намагаючись спростити. ..
Серж

16

Вам потрібно використовувати javascript:

<BODY onLoad="document.getElementById('myButton').focus();">

@Ben зазначає, що не слід додавати обробників подій, як це. Хоча це ще одне питання, він рекомендує використовувати цю функцію:

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

А потім поставте виклик на addLoadEvent на свою сторінку та посилайте на функцію, яка задає фокус на потрібне текстове поле.


14

Просто напишіть автофокус у текстовому полі. Це просто, і він працює так:

 <input name="abc" autofocus></input>

Сподіваюся, це допомагає.


1
це добре, але проблема полягає в тому, що якщо у вас є кроки зі стилем ковзання, це не буде корисним esp, якщо тип введення знаходиться на кроці 3 або на кроці 4 для колишнього
Кобе Брайан

12

Ви можете це легко зробити, використовуючи jquery таким чином:

<script type="text/javascript">

    $(document).ready(function () {
        $("#myTextBoxId").focus();
    });

</script>

зателефонувавши в цю функцію в $(document).ready().

Це означає, що ця функція буде виконуватися, коли DOM буде готовий.

Для отримання додаткової інформації про функцію READY зверніться до сторінки: http://api.jquery.com/ready/


11

Використання простого html та javascript ванілі

<input type='text' id='txtMyInputBox' />


<script language='javascript' type='text/javascript'>
function SetFocus()
{
    // safety check, make sure its a post 1999 browser
    if (!document.getElementById)
    {
        return;
    }

    var txtMyInputBoxElement = document.getElementById("txtMyInputBox");

    if (txtMyInputBoxElement != null)
    {
        txtMyInputBoxElement.focus();
    }
}
SetFocus();
</script>

Для тих, хто там використовує .net фреймворк та asp.net 2.0 або вище, його тривіальність. Якщо ви використовуєте старіші версії фреймворку, вам потрібно буде написати трохи javascript, подібний до вище.

У вашому оброблювачі OnLoad (як правило, завантаження сторінок, якщо ви використовуєте шаблон фондової сторінки, що постачається разом із візуальною студією), ви можете використовувати:

C #

protected void PageLoad(object sender, EventArgs e)
{
    Page.SetFocus(txtMyInputBox);
}

VB.NET

Protected Sub PageLoad(sender as Object, e as EventArgs)

    Page.SetFocus(txtMyInputBox)

End Sub

(* Примітка. Я вилучив символ підкреслення з імені функції, яке, як правило, Page_Load, оскільки в блоці коду він відмовився візуалізувати належним чином! Я не міг побачити в документації на розмітку, як отримати підкреслення, щоб візуалізувати без нагляду.)

Сподіваюся, це допомагає.


7

IMHO, "найчистіший" спосіб вибору першого, видимого, включеного текстового поля на сторінці - це використовувати jQuery і зробити щось подібне:

$(document).ready(function() {
  $('input:text[value=""]:visible:enabled:first').focus();
});

Сподіваюся, що це допомагає ...

Дякую...


6
<html>  
<head>  
<script language="javascript" type="text/javascript">  
function SetFocus(InputID)  
{  
   document.getElementById(InputID).focus();  
}  
</script>  
</head>  
<body onload="SetFocus('Box2')">  
<input id="Box1" size="30" /><br/>  
<input id="Box2" size="30" />  
</body>  
</html>  

5

Як загальна порада, я б рекомендував не красти фокус із адресного рядка. ( Джефф уже говорив про це. )

Завантаження веб-сторінки може зайняти деякий час, а це означає, що зміна фокусу може відбутися через деякий час після введення користувачем URL-адреси pae. Тоді він міг передумати і повернутися до введення URL-адреси, поки ви завантажуєте свою сторінку та вкрадете фокус, щоб помістити її у текстове поле.

Це одна і єдина причина, яка змусила мене видалити Google як свою стартову сторінку.

Звичайно, якщо ви керуєте мережею (локальною мережею) або якщо зміна фокуса полягає у вирішенні важливої ​​проблеми юзабіліті, забудьте все, що я щойно сказав :)


Я погоджуюся з вами в деяких випадках. Однак у моєму конкретному випадку я вискакую маленький дів, який містить лише одне поле введення. Користувач повинен щось ввести та негайно закрити діву, щоб налаштувати фокус зручно.
Марк Бейк

2

У мене була дещо інша проблема. Я хотів autofocus, але хотів, щоб placeholderтекст залишився, перехресний браузер. Деякі браузери приховали б placeholderтекст, як тільки поле зосередилося, деякі збережуть його. Мені довелося або заставити заповнювачі, які залишаються в крос-браузері, що має дивні побічні ефекти, або перестати користуватися autofocus.

Тому я прослухав перший ключ, введений проти тегу body, і перенаправив цей ключ у цільове поле введення. Тоді всі учасники подій вбиваються, щоб уникнути чистоти.

var urlInput = $('#Url');

function bodyFirstKey(ev) {
    $('body').off('keydown', bodyFirstKey);
    urlInput.off('focus', urlInputFirstFocus);

    if (ev.target == document.body) {
        urlInput.focus();
        if (!ev.ctrlKey && !ev.metaKey && !ev.altKey) {
            urlInput.val(ev.key);
            return false;
        }
    }
};
function urlInputFirstFocus() {
    $('body').off('keydown', bodyFirstKey);
    urlInput.off('focus', urlInputFirstFocus);
};

$('body').keydown(bodyFirstKey);
urlInput.focus(urlInputFirstFocus);

https://jsfiddle.net/b9chris/qLrrb93w/


0

Можна встановити autofocusна вхідних елементах

<input type="text" class="b_calle" id="b_calle" placeholder="Buscar por nombre de calle" autofocus="autofocus">

-1

Якщо ви використовуєте ASP.NET, ви можете використовувати

yourControlName.Focus()

в коді на сервері, який додасть відповідний JavaScript на сторінку.

Інші рамки на стороні сервера можуть мати еквівалентний метод.


-3

Скористайтеся наведеним нижче кодом. Для мене це працює

jQuery("[id$='hfSpecialty_ids']").focus()
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.