Câu trả lời:
KeyPress sự kiện chỉ được gọi cho nhân vật (in) phím, sự kiện KeyDown được nâng lên cho tất cả bao gồm không in được như Control, Shift, Alt, BackSpacevv
CẬP NHẬT:
Sự kiện nhấn phím được kích hoạt khi nhấn phím và phím đó thường tạo ra giá trị ký tự
Hãy thử keydown
thay vì keypress
.
Các sự kiện bàn phím xảy ra theo thứ tự này: keydown
, keyup
,keypress
Vấn đề với backspace có lẽ là, trình duyệt sẽ điều hướng trở lại keyup
và do đó trang của bạn sẽ không nhìn thấy keypress
sự kiện.
keydown
keypress
keyup
. unixpapa.com/js/testkey.html
keyup
sự kiện được kích hoạt.
keydown
sự kiện nhưng ký tự không bị xóa khỏi đầu vào cho đến một lúc sau đó.
Sự keypress
kiện này có thể khác nhau trên các trình duyệt.
Tôi đã tạo một Jsfiddle để so sánh các sự kiện bàn phím (sử dụng các phím tắt JQuery) trên Chrome và Firefox. Tùy thuộc vào trình duyệt bạn đang sử dụng một keypress
sự kiện sẽ được kích hoạt hay không - backspace sẽ kích hoạt keydown/keypress/keyup
trên Firefox nhưng chỉ keydown/keyup
trên Chrome.
trên Chrome
keydown/keypress/keyup
khi trình duyệt đăng ký một đầu vào bàn phím ( keypress
được kích hoạt)
keydown/keyup
nếu không có đầu vào bàn phím (được thử nghiệm với alt, shift, backspace, phím mũi tên)
keydown
Chỉ cho tab?
trên Firefox
keydown/keypress/keyup
khi trình duyệt đăng ký đầu vào bàn phím mà còn cho phím lùi, phím mũi tên, tab (vì vậy ở đây keypress
được kích hoạt ngay cả khi không có đầu vào)
keydown/keyup
cho alt, ca
Điều này không đáng ngạc nhiên vì theo https://api.jquery.com/keypress/ :
Lưu ý: vì sự kiện nhấn phím không được bao phủ bởi bất kỳ thông số kỹ thuật chính thức nào, hành vi thực tế gặp phải khi sử dụng có thể khác nhau giữa các trình duyệt, phiên bản trình duyệt và nền tảng.
Việc sử dụng loại sự kiện nhấn phím không được W3C phản đối ( http://www.w3.org/TR/DOM-Level-3-Events/#event-type-keypress )
Loại sự kiện nhấn phím được định nghĩa trong thông số kỹ thuật này để tham khảo và đầy đủ, nhưng đặc điểm kỹ thuật này không tán thành việc sử dụng loại sự kiện này. Khi trong bối cảnh chỉnh sửa, tác giả có thể đăng ký vào sự kiện trước đó.
Cuối cùng, để trả lời câu hỏi của bạn, bạn nên sử dụng keyup
hoặc keydown
để phát hiện một khoảng lùi trên Firefox và Chrome.
Hãy thử nó ở đây:
$(".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>
Một cái gì đó tôi đã viết lên khi bất cứ ai gặp phải vấn đề với những người nhấn backspace trong khi nghĩ rằng họ đang ở trong một trường biểu mẫu
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');
}
});
Kiểm soát số của tôi:
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);" />
thử nó
Mã khóa BackSpace là 8
Gần đây và sạch sẽ hơn nhiều: sử dụng event.key
. Không còn mã số tùy ý!
note.addEventListener('keydown', function(event) {
const key = event.key; // const {key} = event; ES6+
if (key === "Backspace") {
// Do something
}
});
.key
hiện là tùy chọn được đề xuất bởi các tài liệu. Ngoài ra, nó hỗ trợ các bàn phím quốc tế khác nhau với các ánh xạ khác nhau cho bất kỳ phím nào. Chúng không độc đoán theo nghĩa là chúng đã được sửa, nhưng chúng là khi đọc mã
Thay vào đó, hãy sử dụng một trong các sự kiện keyup / keydown / beforeinput.
dựa trên tài liệu tham khảo này , nhấn phím không được dùng nữa và không còn được khuyến nghị.
Sự kiện nhấn phím được kích hoạt khi một phím tạo ra giá trị ký tự được nhấn xuống. Ví dụ về các khóa tạo ra một giá trị ký tự là các phím chữ cái, số và dấu chấm câu. Ví dụ về các khóa không tạo ra giá trị ký tự là các phím bổ trợ như Alt, Shift, Ctrl hoặc Meta.
nếu bạn sử dụng "beforeinput", hãy cẩn thận về tính tương thích của Trình duyệt . sự khác biệt giữa "beforeinput" và hai cái còn lại là "beforeinput" được kích hoạt khi giá trị đầu vào sắp thay đổi, do đó, với các ký tự không thể thay đổi giá trị đầu vào, nó sẽ không được kích hoạt (ví dụ: shift, ctr, alt).
Tôi đã có cùng một vấn đề và bằng cách sử dụng keyup, nó đã được giải quyết.
keypress
sự kiện trong nhiều trình duyệt. Xem unixpapa.com/js/key.html