Как вы автоматически устанавливаете фокус на текстовое поле при загрузке веб-страницы?

Как вы автоматически устанавливаете фокус на текстовое поле при загрузке веб-страницы?

Есть ли для этого HTML-тег или это нужно делать через Javascript?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
168
1
364 362
13
Перейти к ответу Данный вопрос помечен как решенный

Ответы 13

Вам нужно использовать 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 на своей странице и укажите функцию, которая устанавливает фокус на желаемое текстовое поле.

<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>  
Ответ принят как подходящий

Если вы используете jquery:

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

или прототип:

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

или простой javascript:

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

хотя имейте в виду, что это заменит другие обработчики нагрузки, поэтому поищите в Google addLoadEvent () безопасный способ добавления обработчиков загрузки, а не замены.

Почему бы не поставить обработчики на элемент body? Любая ссылка? Спасибо

Alexander Torstling 28.04.2010 15:10

Потому что гораздо проще отделить javascript от HTML. Вы должны добавить поведение сценария к визуальным элементам в вашем HTML.

Ben Scheirman 28.04.2010 18:01

Использование простого ванильного 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 framework и asp.net 2.0 или выше, это тривиально. Если вы используете более старые версии фреймворка, вам нужно написать какой-нибудь javascript, аналогичный приведенному выше.

В обработчике OnLoad (обычно page_load, если вы используете шаблон стандартной страницы, поставляемый с Visual Studio) вы можете использовать:

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, поскольку в блоке кода он отказывался правильно отображаться! Я не видел в документации по разметке, как получить подчеркивание для рендеринга без экранирования.)

Надеюсь это поможет.

В качестве общего совета я бы рекомендовал не красть фокус из адресной строки. (Джефф уже говорил об этом.)

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

Это единственная причина, по которой я удалил Google в качестве стартовой страницы.

Конечно, если вы управляете сетью (локальной сетью) или если основное внимание уделяется решению важной проблемы удобства использования, забудьте все, что я только что сказал :)

Я согласен с вами в некоторых случаях. Однако в моем конкретном случае я открываю небольшой div, в котором только одно поле ввода. Предполагается, что пользователь что-то вводит и сразу закрывает div, поэтому установка фокуса удобна.

Mark Biek 25.09.2008 21:31

В HTML есть Атрибут autofocus для всех полей формы. По этому поводу есть хороший учебник в Погрузитесь в 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 без поддержки.

Что с autofocus = "aufofocus"? Все ссылки, которые вы предоставили, просто говорят о добавлении атрибута: autofocus.

Gerrat 04.12.2014 18:24

Во времена XHTML и HTML4 было обычным делом использовать attribute = "value" для логических атрибутов. HTML5 пришел с «синтаксисом пустых атрибутов», и мы отказались от избыточности. Теперь мы можем сделать <input checked disabled autofocus data-something>

dave1010 09.12.2014 13:34

Мне нравится этот подход ... Этот код принадлежит входу ... Избавьтесь от входа и стрелы, связанный код прямо здесь ... Мы так заблудились в эти дни ... Сейчас мы делаем полный круг, пытаясь упростить. ..

Serge 07.12.2018 06:15

IMHO, самый чистый способ выбрать первое, видимое, активированное текстовое поле на странице - использовать jQuery и сделать что-то вроде этого:

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

Надеюсь, это поможет...

Спасибо...

Вы можете легко сделать это, используя jquery следующим образом:

<script type = "text/javascript">

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

</script>

вызывая эту функцию в $(document).ready().

Это означает, что эта функция будет выполняться, когда DOM будет готов.

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

Используйте приведенный ниже код. Для меня это работает

jQuery("[id$='hfSpecialty_ids']").focus()

У меня была немного другая проблема. Я хотел 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/

Если вы используете ASP.NET, вы можете использовать

yourControlName.Focus()

в коде на сервере, который добавит на страницу соответствующий JavaScript.

У других серверных фреймворков может быть эквивалентный метод.

Просто напишите автофокус в текстовом поле. Это просто, и работает это так:

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

Надеюсь это поможет.

это хорошо, но проблема в том, что если у вас есть шаги со скользящим стилем, это не будет полезно, особенно если тип ввода находится на шаге 3 или шаге 4, например

Kobe Bryan 18.08.2017 20:05

Можно установить autofocus на входных элементах.

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

Другие вопросы по теме