Відповіді:
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