Нажата клавиша видимая / отображаемая - событие нажатия клавиш [дубликат]

Несколько определений из jls объясняют это (глава 14):

Блоки являются состояниями

Как указано здесь , Block является StatementWithoutTrailingSubstatement, который, в свою очередь, является StatementNoShortIf, который является Statement. Таким образом, когда требуется какое-либо из них, мы можем вставить Block.

Предложение if

. Хотя это также относится к for и while -loops, я буду использовать if -значения. Эти правила почти одинаковы. Синтаксическое описание if-statements можно найти здесь здесь .

IfThenStatement:
    if ( Expression ) Statement

IfThenElseStatement:
    if ( Expression ) StatementNoShortIf else Statement

IfThenElseStatementNoShortIf:
    if ( Expression ) StatementNoShortIf else StatementNoShortIf

Итак, мы можем использовать наш блок здесь.

Но с чем это связано? ?

; определяется как EmptyStatement ( link ), что также является StatementNoShortIf. Поэтому в условных фрагментах кода, таких как if-statement и циклы, мы можем заменить Block на EmptyStatement, если требуется StatementNoShortIf или Statement.

Таким образом, if(Expression)EmptyStatement works.

Почему это не дает ошибку?

Довольно просто: java дает ошибку, если находит недопустимый синтаксис. Но if(Expression)EmptyStatement - вполне допустимый синтаксис. Вместо этого javac выдает предупреждение при запуске с соответствующими параметрами. Полный список предупреждений, которые могут быть отключены для , для этой цели содержит имя-предупреждение empty. Таким образом, компиляция с -Xlint:all или -Xlint:empty будет генерировать предупреждение об этом.

В вашей среде IDE должна быть опция для включения такого предупреждения. Для eclipse см. Ответ

@ nullptr . В IntelliJ вы можете нажать Ctrl + Shift + A, ввести empty body в поле поиска и включить предупреждение (помечено на изображении)

Что это даже используется для?

Честно говоря, в нем мало пользы с минималистской точки зрения. Обычно есть способ добиться успеха без команды «ничего не делать». Скорее, речь идет о личных предпочтениях, предпочитаете ли вы использовать

if( a() && b() );

или

if( a() ) b();

, и это применимо и к другим случаям, в которых используется EmptyStatement. Важным моментом для рассмотрения этой темы является читаемость кода. Бывают случаи, когда код становится более читаемым, используя no-op. С другой стороны, есть случаи, когда код становится намного сложнее понять с помощью EmptyStatement - приведенный выше пример будет рассчитывать на более позднюю IMO.

38
задан devios1 17 September 2012 в 22:41
поделиться

3 ответа

Keydown даст вам keyCode нажатой клавиши без каких-либо изменений.

$("#keypresser").keydown(function(e){
    var keycode = e.keyCode;

    var valid = 
        (keycode > 47 && keycode < 58)   || // number keys
        keycode == 32 || keycode == 13   || // spacebar & return key(s) (if you want to allow carriage returns)
        (keycode > 64 && keycode < 91)   || // letter keys
        (keycode > 95 && keycode < 112)  || // numpad keys
        (keycode > 185 && keycode < 193) || // ;=,-./` (in order)
        (keycode > 218 && keycode < 223);   // [\]' (in order)

    return valid;
});

Только цифровые клавиши, буквенные клавиши и пробел будут иметь коды клавиш, соответствующие String.fromCharCode, так как он использует значения Unicode.

Keypress - это представление введенного текста charCode. Обратите внимание, что это событие не будет срабатывать, если текст не будет «распечатан» в результате нажатия клавиши.

$("#keypresser").keypress(function(e){
    var charcode = e.charCode;
    var char = String.fromCharCode(charcode);
    console.log(char);
});

http://jsfiddle.net/LZs2D/1/ продемонстрирует, как это работает.

KeyUp ведет себя аналогично KeyDown.

73
ответ дан Shmiddty 20 August 2018 в 09:26
поделиться
  • 1
    Клавиша табуляции имеет код ключа 9 – Shmiddty 17 September 2012 в 23:10
  • 2
    Многие символы пропущены, например. , или % – Alexander Elgin 19 February 2016 в 12:47
  • 3
    @AlexanderElgin Comma есть, keycode 190.% совпадает с 5, keycode 52, при нажатии клавиши shift. – BobRodes 3 June 2016 в 07:49
  • 4
    Вы также должны проверить e.ctrlKey === e.altKey, потому что если точно один из них нажат, то это горячая клавиша – Somnium 26 October 2016 в 15:48
  • 5
    Успешно ли работает первое решение на международном уровне? Также было бы лучше проверить наличие недействительных ключей? – Quentin Engles 28 October 2017 в 00:27

В этой статье есть список keyCodes в Javascript:

http://www.cambiaresearch.com/articles/15/javascript-char-codes-key- коды

4
ответ дан Dave Zych 20 August 2018 в 09:26
поделиться
  • 1
    Видел это, но это не полный список. – devios1 17 September 2012 в 22:21
  • 2
    Что вы классифицируете как печатные символы? – Dave Zych 17 September 2012 в 22:23
  • 3
    Ключ, который приводит к тому, что персонаж добавляется в текстовое поле, если набирается, в отличие от таких вещей, как backspace, стрелка влево и т. Д. – devios1 17 September 2012 в 22:24

Только для фона событие «keypress» даст вам свойство charCode всякий раз, когда вы нажимаете клавишу символа.

Editor.addEventListener('keypress', function(event){
    if (event.charCode) {
        //// character key
        console.log( String.fromCharCode(event.charCode) ); /// convert charCode to intended character.
    } else {
        //// control key
    }

Однако событие «keypress» не захватывает каждое нажатие клавиши - несколько клавиш загораются перед событием «keypress».

Напротив, событие «keydown» будет захватить каждое нажатие клавиши, но у него нет свойства charCode . Итак, как мы можем определить, является ли это символьным ключом? Проверка каждого нажатия клавиши, если значение keyCode находится в нижней и верхней границах для нескольких диапазонов, не является оптимально эффективной. Я подозреваю, что есть также проблемы для символов вне диапазона ASCII.

Мой подход - это проверка длины события «ключ». Свойство «ключ» является альтернативой «keyCode» для определения того, какой ключ был нажат. Для ключей управления свойство «ключ» является описательным (например, «rightArrow», «F12», «return» и т. Д.). Для символьных клавиш свойство «ключ» для символьного ключа - это только символ (например, «a», «A», «~», «\» и т. Д.). Следовательно, для каждого символьного ключа длина свойства «ключ» будет иметь длину 1; тогда как управляющие символы будут иметь длину больше 1.

Editor.addEventListener('keydown', function(event){
    if (event.key.length == 1){ 
        //// character key
    } else {
        //// control key
    }
})
5
ответ дан iamio 20 August 2018 в 09:26
поделиться
Другие вопросы по тегам:

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