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

В Java все переменные, которые вы объявляете, на самом деле являются «ссылками» на объекты (или примитивы), а не самими объектами.

При попытке выполнить один метод объекта , ссылка просит живой объект выполнить этот метод. Но если ссылка ссылается на NULL (ничего, нуль, void, nada), то нет способа, которым метод будет выполнен. Тогда runtime сообщит вам об этом, выбросив исключение NullPointerException.

Ваша ссылка «указывает» на нуль, таким образом, «Null -> Pointer».

Объект живет в памяти виртуальной машины пространство и единственный способ доступа к нему - использовать ссылки this. Возьмем этот пример:

public class Some {
    private int id;
    public int getId(){
        return this.id;
    }
    public setId( int newId ) {
        this.id = newId;
    }
}

И в другом месте вашего кода:

Some reference = new Some();    // Point to a new object of type Some()
Some otherReference = null;     // Initiallly this points to NULL

reference.setId( 1 );           // Execute setId method, now private var id is 1

System.out.println( reference.getId() ); // Prints 1 to the console

otherReference = reference      // Now they both point to the only object.

reference = null;               // "reference" now point to null.

// But "otherReference" still point to the "real" object so this print 1 too...
System.out.println( otherReference.getId() );

// Guess what will happen
System.out.println( reference.getId() ); // :S Throws NullPointerException because "reference" is pointing to NULL remember...

Это важно знать - когда больше нет ссылок на объект (в пример выше, когда reference и otherReference оба указывают на null), тогда объект «недоступен». Мы не можем работать с ним, поэтому этот объект готов к сбору мусора, и в какой-то момент VM освободит память, используемую этим объектом, и выделит другую.

158
задан Robert Wade 14 December 2017 в 21:11
поделиться

8 ответов

Если Вы используете jQuery:

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

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

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

или плоскость JavaScript:

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

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

240
ответ дан ArtOfWarfare 23 November 2019 в 21:38
поделиться

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

Hope это помогает.

10
ответ дан Jon 23 November 2019 в 21:38
поделиться

Необходимо использовать 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 на Вашей странице и ссылке функция наборы фокус Вам желаемое текстовое поле.

15
ответ дан Espo 23 November 2019 в 21:38
поделиться
<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>  
6
ответ дан Joel Coehoorn 23 November 2019 в 21:38
поделиться

Как общие рекомендации, я рекомендовал бы не красть фокус из строки поиска. ( Jeff уже говорил об этом. )

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

Это - то, и только обоснуйте, что заставил меня удалить Google как свою начальную страницу.

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

5
ответ дан Vincent Robert 23 November 2019 в 21:38
поделиться

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

<input type="text" class="b_calle" id="b_calle" placeholder="Buscar por nombre de calle" autofocus="autofocus">
0
ответ дан 23 November 2019 в 21:38
поделиться

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

91
ответ дан 23 November 2019 в 21:38
поделиться

ИМХО, самый "чистый" способ выбрать Первый , видимое, включенное текстовое поле на странице - использовать jQuery и сделать что-то вроде этого:

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

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

Спасибо ...

6
ответ дан 23 November 2019 в 21:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: