Получение клавиши TAB в [закрытом] текстовом поле

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, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

97
задан Ijas Ameenudeen 18 January 2019 в 08:02
поделиться

5 ответов

Даже если Вы получаете 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>
105
ответ дан Vadim H 24 November 2019 в 05:28
поделиться

Я снабдил бы вкладками добавление отступа не, работают, чем повреждающийся снабжающий вкладками между объектами формы.

, Если Вы хотите сделать отступ, чтобы вставить код в поле Markdown, используйте Ctrl + K (или ⌘K на Mac).

С точки зрения фактической остановки действия, jQuery (который использует Переполнение стека) будет мешать событию пузыриться, когда Вы возвратите false от обратного вызова события. Это делает жизнь легче для работы с несколькими браузерами.

18
ответ дан Naveed S 24 November 2019 в 05:28
поделиться

Предыдущий ответ прекрасен, но я - один из тех парней, которые это твердо против смешивания поведения с представлением (помещающий 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
  }
}
12
ответ дан Munawir 24 November 2019 в 05:28
поделиться

Я отговорил бы от изменения поведения по умолчанию ключа. Я делаю как можно больше, не касаясь мыши, поэтому если Вы заставите мою клавишу Tab не переместиться в следующее поле на форме, то я буду очень ухудшен.

сочетание клавиш А могло быть полезным однако, особенно с большими блоками кода и вложением. Shift-TAB является плохой опцией, потому что это обычно берет меня к предыдущему полю на форме. Возможно, новая кнопка на редакторе WMD для вставки ВКЛАДКИ кода, с сочетанием клавиш, была бы возможна?

6
ответ дан Wally Lawless 24 November 2019 в 05:28
поделиться

В Chrome на Mac клавиша alt-tab вставляет символ табуляции в поле