NullPointerException
s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException
. Они наиболее распространены, но другие способы перечислены на странице NullPointerException
javadoc.
Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException
, be:
public class Example {
public static void main(String[] args) {
Object obj = null;
obj.hashCode();
}
}
В первой строке внутри main
я явно устанавливаю ссылку Object
obj
равной null
. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException
, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.
(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)
Даже если Вы получаете keydown
/ keyup
событие, те - единственные события, которые запускает клавиша Tab, Вам все еще нужен некоторый способ предотвратить действие по умолчанию, перемещаясь в следующий объект в порядке вкладки, от появления.
В Firefox можно звонить preventDefault()
, метод на объекте-событии передал обработчику событий. В IE необходимо возвратить false от дескриптора события. Библиотека JQuery обеспечивает preventDefault
метод на его объекте-событии, который работает в IE и И следующие
<body>
<input type="text" id="myInput">
<script type="text/javascript">
var myInput = document.getElementById("myInput");
if(myInput.addEventListener ) {
myInput.addEventListener('keydown',this.keyHandler,false);
} else if(myInput.attachEvent ) {
myInput.attachEvent('onkeydown',this.keyHandler); /* damn IE hack */
}
function keyHandler(e) {
var TABKEY = 9;
if(e.keyCode == TABKEY) {
this.value += " ";
if(e.preventDefault) {
e.preventDefault();
}
return false;
}
}
</script>
</body>
Я снабдил бы вкладками добавление отступа не, работают, чем повреждающийся снабжающий вкладками между объектами формы.
, Если Вы хотите сделать отступ, чтобы вставить код в поле Markdown, используйте Ctrl + K (или вЊK на Mac).
С точки зрения фактической остановки действия, jQuery (который использует Переполнение стека) будет мешать событию пузыриться, когда Вы возвратите false от обратного вызова события. Это делает жизнь легче для работы с несколькими браузерами.
Предыдущий ответ прекрасен, но я - один из тех парней, которые это твердо против смешивания поведения с представлением (помещающий JavaScript в мой HTML), таким образом, я предпочитаю помещать свою логику обработки событий в мои файлы JavaScript. Кроме того, не все браузеры реализуют событие (или e) тот же путь. Можно хотеть сделать проверку до выполнения любой логики:
document.onkeydown = TabExample;
function TabExample(evt) {
var evt = (evt) ? evt : ((event) ? event : null);
var tabKey = 9;
if(evt.keyCode == tabKey) {
// do work
}
}
Я отговорил бы от изменения поведения по умолчанию ключа. Я делаю как можно больше, не касаясь мыши, поэтому если Вы заставите мою клавишу Tab не переместиться в следующее поле на форме, то я буду очень ухудшен.
сочетание клавиш А могло быть полезным однако, особенно с большими блоками кода и вложением. Shift-TAB является плохой опцией, потому что это обычно берет меня к предыдущему полю на форме. Возможно, новая кнопка на редакторе WMD для вставки ВКЛАДКИ кода, с сочетанием клавиш, была бы возможна?
В Chrome на Mac клавиша alt-tab вставляет символ табуляции в поле
.
Вот один:. Ви!