В 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 освободит память, используемую этим объектом, и выделит другую.
Если Вы используете jQuery:
$(function() {
$("#Box1").focus();
});
или прототип:
Event.observe(window, 'load', function() {
$("Box1").focus();
});
или плоскость JavaScript:
window.onload = function() {
document.getElementById("Box1").focus();
};
, хотя имеют в виду, что это заменит другой на обработчиках загрузок, поэтому ищите addLoadEvent () в Google для безопасного способа добавить onload обработчики вместо замены.
Используя простой 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 это помогает.
Необходимо использовать 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>
Как общие рекомендации, я рекомендовал бы не красть фокус из строки поиска. ( Jeff уже говорил об этом. )
Веб-страница может занять время для загрузки, что означает, что изменение фокуса может произойти некоторое долгое время после того, как пользователь ввел pae URL. Тогда он, возможно, передумал и вернуться к вводу URL, в то время как Вы будете загружать свою страницу и красть фокус для помещения его в текстовое поле.
Это - то, и только обоснуйте, что заставил меня удалить Google как свою начальную страницу.
, Конечно, при управлении сетью (локальная сеть) или если изменение фокуса должно решить важную проблему удобства использования, забудьте все, что я просто сказал:)
Возможно установить autofocus
на входных элементах
<input type="text" class="b_calle" id="b_calle" placeholder="Buscar por nombre de calle" autofocus="autofocus">
В 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 без поддержки.
ИМХО, самый "чистый" способ выбрать Первый , видимое, включенное текстовое поле на странице - использовать jQuery и сделать что-то вроде этого:
$(document).ready(function() {
$('input:text[value=""]:visible:enabled:first').focus();
});
Надеюсь, что это поможет ...
Спасибо ...