Відповіді:
KeyPress подія викликається тільки для символу (версія для друку) ключі, KeyDown події виникають в тому числі для всіх недрукованих , таких як Control, Shift, Alt, BackSpaceі т.д.
ОНОВЛЕННЯ:
Подія натискання клавіші запускається при натисканні клавіші, яка зазвичай видає значення символу
Спробуйте keydown
замість цього keypress
.
Події клавіатури відбуваються в наступному порядку: keydown
, keyup
,keypress
Мабуть, проблема із зворотним простором полягає в тому, що браузер повернеться назад keyup
і, отже, ваша сторінка не побачить keypress
події.
keydown
keypress
keyup
. unixpapa.com/js/testkey.html
keyup
подія не буде запущена.
keydown
подію, але персонаж не видаляється з входу лише десь після цього.
keypress
Подія може відрізнятися в різних браузерах.
Я створив Jsfiddle для порівняння подій на клавіатурі (за допомогою ярликів JQuery) на Chrome і Firefox. Залежно від веб-переглядача, який ви використовуєте, keypress
подія буде спрацьовувати чи ні - зворотний простір запуститься keydown/keypress/keyup
на Firefox, але лише keydown/keyup
в Chrome.
на Chrome
keydown/keypress/keyup
коли браузер реєструє вхід клавіатури ( keypress
спрацьовує)
keydown/keyup
якщо немає клавіатурного вводу (перевірено клавішами Alt, Shift, Backspace, стрілками)
keydown
лише для вкладки?
на Firefox
keydown/keypress/keyup
коли браузер реєструє вхід на клавіатурі, але також і для зворотної області, клавіш зі стрілками, вкладки (так що тут keypress
запускається навіть без введення)
keydown/keyup
для alt, shift
Це не повинно дивувати, оскільки згідно з https://api.jquery.com/keypress/ :
Примітка: оскільки подія натискання клавіші не охоплюється жодними офіційними специфікаціями, реальна поведінка, що виникає при її використанні, може відрізнятися в браузерах, версіях браузера та платформах.
Використання типу події натискання клавіш припинено W3C ( http://www.w3.org/TR/DOM-Level-3-Events/#event-type-keypress )
Тип події натискання клавіші визначений у цій специфікації для довідки та повноти, але ця специфікація знижує використання цього типу події. Під час редагування контекстів автори можуть замість цього підписатись на події раніше.
Нарешті, щоб відповісти на ваше запитання, слід використовувати keyup
або keydown
виявити зворотний простір у Firefox та Chrome.
Спробуйте це тут:
$(".inputTxt").bind("keypress keyup keydown", function (event) {
var evtType = event.type;
var eWhich = event.which;
var echarCode = event.charCode;
var ekeyCode = event.keyCode;
switch (evtType) {
case 'keypress':
$("#log").html($("#log").html() + "<b>" + evtType + "</b>" + " keycode: " + ekeyCode + " charcode: " + echarCode + " which: " + eWhich + "<br>");
break;
case 'keyup':
$("#log").html($("#log").html() + "<b>" + evtType + "</b>" + " keycode: " + ekeyCode + " charcode: " + echarCode + " which: " + eWhich + "<p>");
break;
case 'keydown':
$("#log").html($("#log").html() + "<b>" + evtType + "</b>" + " keycode: " + ekeyCode + " charcode: " + echarCode + " which: " + eWhich + "<br>");
break;
default:
break;
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input class="inputTxt" type="text" />
<div id="log"></div>
Щось я написав на випадок, коли хтось стикається з проблемою, коли люди потрапляють у задній простір, думаючи, що вони у формі форми
window.addEventListener("keydown", function(e){
/*
* keyCode: 8
* keyIdentifier: "U+0008"
*/
if(e.keyCode === 8 && document.activeElement !== 'text') {
e.preventDefault();
alert('Prevent page from going back');
}
});
Мій цифровий контроль:
function CheckNumeric(event) {
var _key = (window.Event) ? event.which : event.keyCode;
if (_key > 95 && _key < 106) {
return true;
}
else if (_key > 47 && _key < 58) {
return true;
}
else {
return false;
}
}
<input type="text" onkeydown="return CheckNumerick(event);" />
Спробуй це
Код ключа BackSpace - 8
Більш свіжі та набагато чистіші: використання event.key
. Більше немає довільних кодів номерів!
note.addEventListener('keydown', function(event) {
const key = event.key; // const {key} = event; ES6+
if (key === "Backspace") {
// Do something
}
});
.key
на даний момент рекомендована документація. Крім того, він підтримує різні міжнародні клавіатури з різними відображеннями для будь-якого клавіші. Вони не є довільними в тому сенсі, що їх фіксують, але вони є при читанні коду
Замість цього використовуйте одну з подій клавіатури / клавіші / перед введенням.
на основі цієї посилання натискання клавіш застаріле і більше не рекомендується.
Подія натискання клавіші запускається, коли натискається клавіша, яка створює значення символу. Прикладами клавіш, які створюють символьне значення, є алфавітні, числові та пунктуаційні ключі. Прикладами клавіш, які не видають значення символу, є ключі-модифікатори, такі як Alt, Shift, Ctrl або Meta.
якщо ви використовуєте "раніше", будьте уважні щодо сумісності браузера . Різниця між "beforeinput" та іншими двома полягає в тому, що "beforeinput" запускається, коли вхідне значення майже зміниться, тому для символів, які не можуть змінити вхідне значення, воно не запускається (наприклад, shift, ctr, alt).
У мене була така ж проблема, і за допомогою клавіатури вона була вирішена.
keypress
події у багатьох браузерах. Дивіться unixpapa.com/js/key.html