Có gì mới với KeyboardEvents? Chìa khoá và mã!

Một vài phiên bản Chrome trước đây có hai tính năng bổ sung cho KeyboardEvent, được dùng làm tham số truyền tới trình nghe sự kiện keydown, keypresskeyup. Cả thuộc tính code (được thêm vào Chrome 48) và thuộc tính key (được thêm vào Chrome 51) đều giúp nhà phát triển dễ dàng lấy được những thông tin mà nếu không dùng các thuộc tính cũ thì nhà phát triển có thể dễ dàng lấy thông tin khó.

Thuộc tính của mã

Đầu tiên là thuộc tính code. Chuỗi này được đặt thành một chuỗi biểu thị phím đã nhấn để tạo KeyboardEventkhông tính đến bố cục bàn phím hiện tại (ví dụ: QWERTY so với Dvorak), ngôn ngữ (ví dụ: tiếng Anh và tiếng Pháp) hoặc phím bổ trợ bất kỳ. Điều này rất hữu ích khi bạn quan tâm đến phím vật lý nào được nhấn, thay vì ký tự tương ứng. Ví dụ: nếu bạn đang viết trò chơi, có thể bạn muốn một bộ phím nhất định để di chuyển người chơi theo các hướng khác nhau và tốt nhất việc liên kết đó nên độc lập với bố cục bàn phím.

Thuộc tính khoá

Tiếp theo, chúng ta có thuộc tính key mới. Chuỗi này cũng được thiết lập thành một chuỗi, nhưng trong khi code trả về thông tin về phím vật lý đã nhấn, thì key chứa ký tự được tạo bằng phím đó, có tính đến bố cục bàn phím hiện tại, ngôn ngữ và phím bổ trợ. Việc xem xét giá trị của thuộc tính key sẽ hữu ích khi bạn cần biết ký tự nào sẽ hiện trên màn hình như thể người dùng đã nhập văn bản.

Điều này có nghĩa là gì trong thực tế?

Để đưa ra một ví dụ cụ thể, hãy giả sử người dùng của bạn đang sử dụng bàn phím Hoa Kỳ có bố cục bàn phím QWERTY. Việc nhấn phím Q vật lý trên bàn phím đó sẽ dẫn đến KeyboardEvent có thuộc tính code được đặt thành "KeyQ". Điều này luôn áp dụng bất kể bố cục bàn phím và mọi phím bổ trợ khác. Để so sánh, trên bàn phím tiếng Pháp (AZERTY) phím này vẫn sẽ có code"KeyQ" mặc dù chữ cái in trên nắp phím là "a". Việc nhấn phím Q vật lý trên chính bàn phím Hoa Kỳ đó thường sẽ tạo ra một KeyboardEvent với key được đặt thành "q" (không có phím bổ trợ) hoặc "Q" (với Shift hay CapsLock) hoặc "œ" (với OS X, với Alt). Trên bàn phím AZERTY của Pháp, phím này sẽ tạo ra một chữ "a" (hoặc "A" với Shift hoặc CapsLock). Đối với các bố cục bàn phím khác, giá trị key có thể là "й", "ض", "ㅂ", "た" hoặc một số ký tự khác. Xem lại ví dụ về trò chơi trước đó, nếu muốn trò chơi sử dụng các phím WASD để chuyển động, bạn có thể sử dụng thuộc tính code và kiểm tra "KeyW", "KeyA", "KeyS""KeyD". Tính năng này sẽ hoạt động đối với tất cả bàn phím và mọi bố cục — ngay cả bàn phím AZERTY hoán đổi vị trí của các phím "w" và "z".

Bàn phím ảo

Bạn sẽ nhận thấy rằng cho đến nay, chúng tôi vẫn tập trung vào hành vi giả sử bàn phím vật lý. Còn những người dùng đang nhập bằng bàn phím ảo hoặc thiết bị nhập thay thế thì sao? Quy cách cung cấp hướng dẫn chính thức cho thuộc tính code. Tóm lại, bàn phím ảo bắt chước bố cục của bàn phím tiêu chuẩn sẽ dẫn đến việc đặt thuộc tính code thích hợp. Tuy nhiên, bàn phím ảo sử dụng bố cục phi truyền thống có thể khiến code không được thiết lập.

Mọi thứ đơn giản hơn đối với thuộc tính key. Bạn nên đặt thuộc tính này thành một chuỗi dựa trên ký tự mà người dùng đã nhập (ảo).

Dùng thử

Gary Kačmarčík đã tập hợp một bản minh hoạ tuyệt vời để trực quan hoá tất cả các thuộc tính có liên quan đến KeyboardEvent:

Thuộc tính KeyEvent

Hỗ trợ trên nhiều trình duyệt

Hỗ trợ cho thuộc tính code, tại thời điểm viết bài này, chỉ giới hạn ở Chrome 48 trở lên, Opera 35 trở lên và Firefox 44 trở lên. Thuộc tính key được hỗ trợ trong Firefox 44 trở lên, Chrome 51 trở lên và Opera 38+ với hỗ trợ một phần trong Internet Explorer 9+ và Edge 13 trở lên.