KeyboardEvent
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
* Some parts of this feature may have varying levels of support.
Các đối tượng KeyboardEvent mô tả tương tác của người dùng với bàn phím; mỗi sự kiện mô tả một tương tác đơn lẻ giữa người dùng và một phím (hoặc tổ hợp phím với các phím bổ trợ) trên bàn phím. Loại sự kiện (keydown, keypress, hoặc keyup) xác định loại hoạt động bàn phím nào đã xảy ra.
Note:
Các sự kiện KeyboardEvent chỉ cho biết tương tác nào mà người dùng đã thực hiện với một phím trên bàn phím ở mức thấp, không cung cấp ý nghĩa ngữ cảnh cho tương tác đó. Khi bạn cần xử lý nhập văn bản, hãy sử dụng sự kiện input thay thế. Các sự kiện bàn phím có thể không được kích hoạt nếu người dùng đang sử dụng phương tiện nhập văn bản thay thế, chẳng hạn như hệ thống viết tay trên máy tính bảng hoặc bảng vẽ đồ họa.
Constructor
KeyboardEvent()-
Tạo một đối tượng
KeyboardEventmới.
Hằng số
Giao diện KeyboardEvent định nghĩa các hằng số sau.
Vị trí bàn phím
Các hằng số sau xác định sự kiện phím bắt nguồn từ phần nào của bàn phím. Chúng được truy cập dưới dạng KeyboardEvent.DOM_KEY_LOCATION_STANDARD, v.v.
| Hằng số | Giá trị | Mô tả |
|---|---|---|
DOM_KEY_LOCATION_STANDARD |
0x00 |
Phím được mô tả bởi sự kiện không được xác định là nằm ở một khu vực cụ thể nào của bàn phím; nó không nằm trên bàn phím số (trừ khi đó là phím NumLock), và đối với các phím bị trùng lặp ở bên trái và bên phải bàn phím, phím đó vì lý do nào đó không được liên kết với vị trí đó. Ví dụ bao gồm các phím chữ và số trên bàn phím PC 101 US tiêu chuẩn, phím NumLock và phím cách. |
DOM_KEY_LOCATION_LEFT |
0x01 |
Phím là một phím có thể tồn tại ở nhiều vị trí trên bàn phím và trong trường hợp này, nó nằm ở bên trái của bàn phím. Ví dụ bao gồm phím Control trái, phím Command trái trên bàn phím Macintosh, hoặc phím Shift trái. |
DOM_KEY_LOCATION_RIGHT |
0x02 |
Phím là một phím có thể tồn tại ở nhiều vị trí trên bàn phím và trong trường hợp này, nó nằm ở bên phải của bàn phím. Ví dụ bao gồm phím Shift phải và phím Alt phải (Option trên bàn phím Mac). |
DOM_KEY_LOCATION_NUMPAD |
0x03 |
Phím nằm trên bàn phím số, hoặc là một phím ảo
được liên kết với bàn phím số nếu có nhiều hơn một nơi phím
có thể bắt nguồn. Phím NumLock không thuộc nhóm
này và luôn được mã hóa với vị trí
Ví dụ bao gồm các chữ số trên bàn phím số, phím Enter của bàn phím số, và dấu thập phân trên bàn phím số. |
Thuộc tính instance
Giao diện này cũng kế thừa các thuộc tính từ cha của nó, UIEvent và Event.
KeyboardEvent.altKeyRead only-
Trả về một giá trị boolean là
truenếu phím Alt (Option hoặc ⌥ trên macOS) đang hoạt động khi sự kiện bàn phím được tạo. KeyboardEvent.codeRead only-
Trả về một chuỗi với giá trị mã của phím vật lý được biểu diễn bởi sự kiện.
Warning: Điều này bỏ qua bố cục bàn phím của người dùng, vì vậy nếu người dùng nhấn phím ở vị trí "Y" trong bố cục bàn phím QWERTY (gần giữa của hàng phía trên hàng home), điều này sẽ luôn trả về "KeyY", ngay cả khi người dùng có bàn phím QWERTZ (có nghĩa là người dùng mong đợi một "Z" và tất cả các thuộc tính khác sẽ cho biết một "Z") hoặc bố cục bàn phím Dvorak (nơi người dùng sẽ mong đợi một "F"). Nếu bạn muốn hiển thị các phím chính xác cho người dùng, bạn có thể sử dụng
Keyboard.getLayoutMap(). KeyboardEvent.ctrlKeyRead only-
Trả về một giá trị boolean là
truenếu phím Ctrl đang hoạt động khi sự kiện bàn phím được tạo. KeyboardEvent.isComposingRead only-
Trả về một giá trị boolean là
truenếu sự kiện được kích hoạt saucompositionstartvà trướccompositionend. KeyboardEvent.keyRead only-
Trả về một chuỗi biểu diễn giá trị phím của phím được biểu diễn bởi sự kiện.
KeyboardEvent.locationRead only-
Trả về một số biểu diễn vị trí của phím trên bàn phím hoặc thiết bị nhập liệu khác. Danh sách các hằng số xác định vị trí được hiển thị ở trên trong Vị trí bàn phím.
KeyboardEvent.metaKeyRead only-
Trả về một giá trị boolean là
truenếu phím Meta (trên bàn phím Mac là phím ⌘ Command; trên bàn phím Windows là phím Windows (⊞)) đang hoạt động khi sự kiện bàn phím được tạo. KeyboardEvent.repeatRead only-
Trả về một giá trị boolean là
truenếu phím đang được giữ xuống đến mức nó đang tự động lặp lại. KeyboardEvent.shiftKeyRead only-
Trả về một giá trị boolean là
truenếu phím Shift đang hoạt động khi sự kiện bàn phím được tạo.
Các thuộc tính lỗi thời
KeyboardEvent.charCodeDeprecated Read only-
Trả về một số biểu diễn số tham chiếu Unicode của phím; thuộc tính này chỉ được sử dụng bởi sự kiện
keypress. Trong Firefox 26, điều này trả về mã cho các ký tự có thể in. KeyboardEvent.keyCodeDeprecated Read only-
Trả về một số biểu diễn mã số phụ thuộc hệ thống và triển khai xác định giá trị không thay đổi của phím đã nhấn.
KeyboardEvent.keyIdentifierNon-standard Deprecated Read only-
Thuộc tính này không chuẩn và đã bị loại bỏ để thay thế bằng
KeyboardEvent.key. Nó là một phần của phiên bản cũ của DOM Level 3 Events.
Phương thức instance
Giao diện này cũng kế thừa các phương thức từ cha của nó, UIEvent và Event.
KeyboardEvent.getModifierState()-
Trả về một giá trị boolean cho biết liệu phím bổ trợ như Alt, Shift, Ctrl, hoặc Meta, có được nhấn khi sự kiện được tạo hay không.
Phương thức lỗi thời
KeyboardEvent.initKeyboardEvent()Deprecated-
Khởi tạo một đối tượng
KeyboardEvent. Phương thức này hiện đã lỗi thời. Bạn nên sử dụng constructorKeyboardEvent()thay thế.
Sự kiện
Các sự kiện sau dựa trên loại KeyboardEvent. Trong danh sách dưới đây, mỗi sự kiện liên kết đến tài liệu cho trình xử lý sự kiện của Element, áp dụng chung cho tất cả các đối tượng nhận, bao gồm Element, Document, và Window.
Sự kiện lỗi thời
keypressDeprecated-
Một phím thường tạo ra giá trị ký tự đã được nhấn. Sự kiện này phụ thuộc nhiều vào thiết bị và đã lỗi thời. Bạn không nên sử dụng nó.
Ghi chú sử dụng
Có ba loại sự kiện bàn phím: keydown, keypress, và keyup. Đối với hầu hết các phím, Gecko gửi một chuỗi sự kiện bàn phím như sau:
- Khi phím được nhấn lần đầu, sự kiện
keydownđược gửi. - Nếu phím không phải là phím bổ trợ, sự kiện
keypressđược gửi. - Khi người dùng nhả phím, sự kiện
keyupđược gửi.
Trường hợp đặc biệt
Một số phím chuyển đổi trạng thái của đèn báo; chúng bao gồm các phím như Caps Lock, Num Lock và Scroll Lock. Trên Windows và Linux, các phím này chỉ gửi sự kiện keydown và keyup.
Note:
Trên Linux, Firefox 12 và các phiên bản trước đó cũng gửi sự kiện keypress cho các phím này.
Tuy nhiên, một hạn chế của mô hình sự kiện macOS khiến Caps Lock chỉ gửi sự kiện keydown. Num Lock được hỗ trợ trên một số mẫu laptop cũ hơn (các mẫu từ 2007 trở về trước), nhưng kể từ đó, macOS không còn hỗ trợ Num Lock ngay cả trên bàn phím rời. Trên các MacBook cũ có phím Num Lock, phím đó không tạo ra bất kỳ sự kiện bàn phím nào. Gecko hỗ trợ phím Scroll Lock nếu bàn phím rời có phím F14 được kết nối. Trong một số phiên bản Firefox cũ hơn, phím này tạo ra sự kiện keypress; hành vi không nhất quán này là lỗi Firefox 602812.
Xử lý tự động lặp
Khi một phím được nhấn và giữ, nó bắt đầu tự động lặp lại. Điều này dẫn đến một chuỗi sự kiện tương tự như sau được gửi:
keydownkeypresskeydownkeypress- <<lặp lại cho đến khi người dùng nhả phím>>
keyup
Đây là những gì đặc tả DOM Level 3 quy định sẽ xảy ra. Tuy nhiên, có một số lưu ý, như mô tả dưới đây.
Tự động lặp trên một số môi trường GTK như Ubuntu 9.4
Trong một số môi trường dựa trên GTK, tự động lặp gửi một sự kiện key-up gốc tự động trong quá trình tự động lặp và không có cách nào để Gecko biết được sự khác biệt giữa một chuỗi nhấn phím lặp lại và một tự động lặp. Trên các nền tảng đó, một phím tự động lặp sẽ tạo ra chuỗi sự kiện sau:
keydownkeypresskeyupkeydownkeypresskeyup- <<lặp lại cho đến khi người dùng nhả phím>>
keyup
Trong các môi trường này, thật không may, không có cách nào cho nội dung web để phân biệt giữa phím tự động lặp và phím chỉ đang được nhấn lặp lại.
Ví dụ
document.addEventListener("keydown", (event) => {
const keyName = event.key;
if (keyName === "Control") {
// không alert khi chỉ nhấn phím Control.
return;
}
if (event.ctrlKey) {
// Mặc dù event.key không phải là 'Control' (ví dụ, 'a' được nhấn),
// event.ctrlKey có thể là true nếu phím Ctrl được nhấn cùng lúc.
alert(`Tổ hợp ctrlKey + ${keyName}`);
} else {
alert(`Phím đã nhấn ${keyName}`);
}
});
document.addEventListener("keyup", (event) => {
const keyName = event.key;
// Khi người dùng nhả phím Ctrl, phím không còn hoạt động,
// nên event.ctrlKey là false.
if (keyName === "Control") {
alert("Phím Control đã được nhả");
}
});
Đặc điểm kỹ thuật
| Specification |
|---|
| UI Events> # interface-keyboardevent> |
Đặc tả giao diện KeyboardEvent đã trải qua nhiều phiên bản nháp, đầu tiên là DOM Events Level 2 nơi nó bị loại bỏ do không có sự đồng thuận, sau đó là DOM Events Level 3. Điều này dẫn đến việc triển khai các phương thức khởi tạo không chuẩn, phiên bản DOM Events Level 2 ban đầu, KeyboardEvent.initKeyEvent() bởi các trình duyệt Gecko và phiên bản DOM Events Level 3 ban đầu, KeyboardEvent.initKeyboardEvent() bởi các trình duyệt khác. Cả hai đã được thay thế bằng cách sử dụng constructor hiện đại: KeyboardEvent().
Tương thích trình duyệt
Ghi chú tương thích
- Bắt đầu từ Firefox 65, sự kiện
keypresskhông còn được kích hoạt cho các phím không in được (lỗi Firefox 968056), ngoại trừ phím Enter, và các tổ hợp phím Shift + Enter và Ctrl + Enter (các tổ hợp này được giữ lại cho mục đích tương thích chéo trình duyệt).