Возможный дубликат:
Какой код ключа для escape-ключа с jQuery
Как обнаружить клавишу Escape в IE, Firefox и Chrome?
Ниже код работает в IE и предупреждения 27
, но в firefox он предупреждает 0
$('body').keypress(function(e){
alert(e.which);
if(e.which == 27){
// Close my modal window
}
});
Примечание: keyCode
получает устаревший key
использования вместо.
function keyPress (e) {
if(e.key === "Escape") {
// write your logic here.
}
}
Вот jsfiddle
keyCode
становится устаревшим
Кажется,
keydown
иkeyup
работа, даже еслиkeypress
не может
$(document).keyup(function(e) {
if (e.key === "Escape") { // escape key maps to keycode '27'
// <DO YOUR WORK HERE>
}
});
$(document).on('keyup.unique_name', ...)
вы также можете использовать пространство имен для события, $(document).on('keyup.unique_name', ...)
и $(document).unbind('keyup.unique_name')
keydown
событие будет работать нормально для побега и имеет преимущество позволяет использовать keyCode
во всех браузерах. Также вам нужно прикрепить слушателя к document
а не к телу.
Обновление май 2016
keyCode
настоящее время находится в процессе устаревания, и большинство современных браузеров теперь предлагают свойство key
, хотя пока вам все еще понадобится запасной вариант для достойной поддержки браузера (на момент написания текущих выпусков Chrome и Safari его не поддерживали).).
Обновление сентябрь 2018 г. evt.key
теперь поддерживается всеми современными браузерами.
document.onkeydown = function(evt) {
evt = evt || window.event;
var isEscape = false;
if ("key" in evt) {
isEscape = (evt.key === "Escape" || evt.key === "Esc");
} else {
isEscape = (evt.keyCode === 27);
}
if (isEscape) {
alert("Escape");
}
};
Click me
<input>
и поэтому он будет срабатывать только тогда, когда этот элемент имеет фокус.
document.getElementById('test').onkeydown = function(evt) { if ((evt || window.event).keyCode == 27) { alert() } }
Используя JavaScript, вы можете проверить работу jsfiddle
document.onkeydown = function(evt) {
evt = evt || window.event;
if (evt.keyCode == 27) {
alert('Esc key pressed.');
}
};
Используя jQuery, вы можете проверить работу jsfiddle
jQuery(document).on('keyup',function(evt) {
if (evt.keyCode == 27) {
alert('Esc key pressed.');
}
});
проверить keyCode
&& & which
и keyup
|| keydown
$(document).keydown(function(e){
var code = e.keyCode || e.which;
alert(code);
});
Ниже приведен код, который не только отключает клавишу ESC, но также проверяет условие, в котором он нажат, и в зависимости от ситуации он выполнит действие или нет.
В этом примере
e.preventDefault();
отключит действие нажатия клавиши ESC.
Вы можете сделать что угодно, чтобы скрыть div следующим образом:
document.getElementById('myDivId').style.display = 'none';
При нажатии клавиши ESC также учитывается:
(e.target.nodeName=='BODY')
Вы можете удалить эту часть условия if, если хотите применить ее ко всем. Или вы можете нацелить INPUT здесь только для применения этого действия, когда курсор находится в поле ввода.
window.addEventListener('keydown', function(e){
if((e.key=='Escape'||e.key=='Esc'||e.keyCode==27) && (e.target.nodeName=='BODY')){
e.preventDefault();
return false;
}
}, true);
Лучший способ - сделать функцию для этого
ФУНКЦИЯ:
$.fn.escape = function (callback) {
return this.each(function () {
$(document).on("keydown", this, function (e) {
var keycode = ((typeof e.keyCode !='undefined' && e.keyCode) ? e.keyCode : e.which);
if (keycode === 27) {
callback.call(this, e);
};
});
});
};
Пример:
$("#my-div").escape(function () {
alert('Escape!');
})
keypress
не срабатывает при нажатии клавиши escape. По крайней мере, не в Chrome на Mac.
keydown
исправить проблему.
Я думаю, что самый простой способ - ванильный javascript:
document.onkeyup = function(event) {
if (event.key === 27){
//do something here
}
}
Escape
как event.key
а не 27
keyup
илиkeydown
в сочетании сkeyCode
работает во всех браузерах.