Какой код клавиши для escape-ключа с помощью jQuery - PullRequest
537 голосов
/ 21 июля 2009

У меня есть две функции. Когда нажата кнопка ввода, функции работают правильно, а когда нажата кнопка выхода - нет. Какой правильный номер для клавиши escape?

$(document).keypress(function(e) { 
    if (e.which == 13) $('.save').click();   // enter (works as expected)
    if (e.which == 27) $('.cancel').click(); // esc   (does not work)
});

Ответы [ 15 ]

6 голосов
/ 18 сентября 2013

Чтобы объяснить, где нет других ответов; проблема в том, что вы используете keypress.

Возможно, событие просто имеет неправильное название, но keypress определено, чтобы сработать, когда when an actualcharacteris being inserted. То есть текст.
Принимая во внимание, что вы хотите keydown / keyup, который срабатывает всякий раз, когда (до или после, соответственно) the user depresses akey. То есть эти вещи на клавиатуре.

Разница появляется здесь, потому что esc является управляющим символом (буквально «непечатный символ») и поэтому не пишет никакого текста, поэтому даже не запускает keypress. > enter странно, потому что, даже если вы используете его в качестве управляющего символа (то есть для управления пользовательским интерфейсом), он все равно вставляет символ новой строки, который вызовет keypress.

Источник: Причудливый режим

4 голосов
/ 06 сентября 2017

Просто опубликовать обновленный ответ, чем e.keyCode считается УСТАРЕЛО в MDN .

Вместо этого вы должны выбрать e.key, который поддерживает чистые имена для всего. Вот соответствующая копия пасты

window.addEventListener("keydown", function (event) {
  if (event.defaultPrevented) {
    return; // Do nothing if the event was already processed
  }

  switch (event.key) {
    case "ArrowDown":
      // Do something for "down arrow" key press.
      break;
    case "ArrowUp":
      // Do something for "up arrow" key press.
      break;
    case "ArrowLeft":
      // Do something for "left arrow" key press.
      break;
    case "ArrowRight":
      // Do something for "right arrow" key press.
      break;
    case "Enter":
      // Do something for "enter" or "return" key press.
      break;
    case "Escape":
      // Do something for "esc" key press.
      break;
    default:
      return; // Quit when this doesn't handle the key event.
  }

  // Cancel the default action to avoid it being handled twice
  event.preventDefault();
}, true);
4 голосов
/ 17 сентября 2014

Я знаю, что этот вопрос задает вопрос о jquery, но для тех, кто использует jqueryui, существуют константы для многих кодов клавиш:

$.ui.keyCode.ESCAPE

http://api.jqueryui.com/jQuery.ui.keyCode/

4 голосов
/ 03 февраля 2012

Я всегда использовал keyup и e.which, чтобы поймать escape-ключ.

3 голосов
/ 08 октября 2015

Надежная библиотека Javascript для ввода ввода с клавиатуры и введенных комбинаций клавиш. У него нет зависимостей.

http://jaywcjlove.github.io/hotkeys/

hotkeys('enter,esc', function(event,handler){
    switch(handler.key){
        case "enter":$('.save').click();break;
        case "esc":$('.cancel').click();break;
    }
});

Горячие клавиши понимают следующие модификаторы: , shift опция alt ctrl управление команда и .

Для быстрого доступа можно использовать следующие специальные клавиши: Backspace tab , clear , enter , return ESC побег пространство до вниз слева , право дом конец PageUp PageDown дель удалить и f1 до f19 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...