Công cụ Tìm Mã Khóa JavaScript

Nhấn bất kỳ phím nào trên bàn phím để xem các thuộc tính sự kiện JavaScript của nó.

Nhấn một phím…

30 năm lịch sử sự kiện bàn phím trong JavaScript

Chưa có phím nào được nhấn

Cách hoạt động

  1. Nhấn một phím: nhấp vào ô nhập và nhấn bất kỳ phím nào, chữ cái, số, phím chức năng, mũi tên, phím bổ trợ hoặc phím đặc biệt.
  2. Đọc mã phím: công cụ hiển thị tức thì các giá trị event.key, event.code, event.keyCode (kế thừa) và charCode của phím.
  3. Sử dụng trong mã của bạn: sao chép các giá trị chính xác cần thiết cho trình lắng nghe sự kiện bàn phím hoặc các phím tắt của bạn.

Tại sao sử dụng trình tìm keycode?

Sự kiện bàn phím JavaScript hiển thị nhiều thuộc tính khác nhau, key, code, keyCode, charCode và which, và biết cái nào để dùng và so sánh với giá trị nào luôn là điều khó khăn. Trình tìm KeyCode loại bỏ việc đoán mò bằng cách cho phép bạn nhấn một phím và xem ngay tất cả các thuộc tính sự kiện của nó. Vô giá cho việc xây dựng phím tắt bàn phím, xử lý các phím đặc biệt, triển khai hotkey và gỡ lỗi trình lắng nghe sự kiện bàn phím.

Tính năng

Câu hỏi thường gặp

Sự khác biệt giữa event.key và event.keyCode là gì?

event.key là tiêu chuẩn hiện đại, nó trả về chuỗi dễ đọc như « ArrowLeft » hoặc « Enter ». event.keyCode là mã số kế thừa (đã lỗi thời nhưng vẫn được hỗ trợ). Dùng event.key cho mã mới; event.keyCode để duy trì tương thích với trình duyệt cũ.

Làm thế nào để phát hiện Ctrl+S hoặc các tổ hợp phím khác?

Tổ hợp phím sử dụng event.key kết hợp với kiểm tra phím bổ trợ: if (event.ctrlKey && event.key === "s"). Nhấn Ctrl+S trong công cụ này để xem tất cả giá trị, sau đó tái tạo cùng điều kiện trong trình lắng nghe sự kiện của bạn.

Tại sao một số phím hiển thị cùng keyCode?

Giá trị keyCode chưa được chuẩn hóa và một số phím chia sẻ mã tùy theo ngữ cảnh. event.code đáng tin cậy hơn, nó xác định vị trí vật lý của phím (ví dụ « KeyA ») bất kể bố cục bàn phím, trong khi event.key phản ánh ký tự được phím đó tạo ra.

30 năm lịch sử sự kiện bàn phím trong JavaScript

Các sự kiện bàn phím có một lịch sử lộn xộn nổi tiếng trong DOM. Netscape Navigator 2 (1995) đã giới thiệu các handler ban đầu onkeydown, onkeypressonkeyup với thuộc tính số keyCode, mà không có đặc tả; các trình duyệt đều phát minh ra các giá trị riêng của mình. Internet Explorer 4 (1997) đã thực hiện biến thể riêng với event.keyCode là thuộc tính duy nhất, trong khi Netscape giữ với event.which. DOM Level 2 Events (W3C, tháng 11/2000) đã chuẩn hóa luồng sự kiện (capture/bubble) nhưng đã rõ ràng bỏ qua các sự kiện bàn phím vì các nhà cung cấp không thể đồng ý. Kết quả: các nhà phát triển đã viết mã như e.keyCode || e.which trong hơn một thập kỷ. DOM Level 3 Events (W3C Working Draft 2003, Khuyến nghị 2018) cuối cùng đã giới thiệu event.key hiện đại (ký tự Unicode hoặc phím được đặt tên như «ArrowLeft») và event.code (vị trí phím vật lý như «KeyA», độc lập với bố cục), cùng với việc bãi bỏ keyCode, charCodewhich. Đặc tả UI Events (W3C, đang tiếp tục) là ngôi nhà hiện đại của công việc này. Các trình duyệt bắt kịp dần dần: Chrome 51 (tháng 5/2016), Firefox 47 (tháng 6/2016), Safari 10.1 (tháng 3/2017) tất cả đã đưa hỗ trợ event.code. Sự kiện cũ keypress bị bãi bỏ để ủng hộ các sự kiện beforeinputinput.

5 thuộc tính, được giải mã

Nơi tra cứu mã phím thực sự quan trọng

Những lỗi phổ biến trong xử lý sự kiện bàn phím

Thêm các câu hỏi thường gặp

Tại sao handler phím của tôi không kích hoạt khi người dùng có bàn phím không phải US?

Hầu như luôn vì bạn đang kiểm tra event.key cho một ký tự chỉ tồn tại với Shift trên bố cục đó. Trên bàn phím QWERTZ Đức, «/» là Shift+7 (không phải phím riêng của nó); trên AZERTY Pháp, các chữ số 0-9 được gõ bằng Shift+hàng-trên. Sử dụng event.code (phím vật lý) cho các phím tắt dựa trên vị trí, hoặc event.key cho các phím tắt dựa trên nội dung (nơi bạn thực sự muốn ký tự mà người dùng vừa gõ).

Làm thế nào tôi xử lý Cmd+K / Ctrl+K nhất quán giữa các nền tảng?

Thành ngữ tiêu chuẩn: if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "k") { e.preventDefault(); openPalette(); }. Trên macOS, e.metaKey là phím Cmd; trên Windows/Linux, e.ctrlKey là điều người dùng mong đợi. Chấp nhận cả hai. Luôn preventDefault vì trình duyệt ràng buộc Cmd+K với «tập trung thanh địa chỉ» trong một số trình duyệt. Thêm !e.repeat để tránh kích hoạt khi giữ phím.

JavaScript có thể phát hiện phím nhấn toàn cầu bên ngoài trang không?

Không, và đây là theo thiết kế vì bảo mật. Trình duyệt chỉ kích hoạt các sự kiện bàn phím cho trang hoặc phần tử được tập trung. Tiện ích trình duyệt có thể lắng nghe với phạm vi rộng hơn bằng cách sử dụng API chrome.commands. Ứng dụng gốc trong Electron, Tauri, v.v., có thể sử dụng các hook toàn cầu cấp HĐH. Ứng dụng ngân hàng và 2FA dựa vào sự cô lập này: một tab độc hại không thể keylog trình quản lý mật khẩu của bạn.

Cách đúng để phát hiện «vừa nhấn» vs «đang giữ» là gì?

Đối với chuyển đổi, kiểm tra !e.repeat trong handler keydown, sự kiện đầu tiên có repeat: false, các sự kiện tự động lặp lại tiếp theo có repeat: true. Đối với các hành động liên tục (di chuyển trò chơi), theo dõi trạng thái phím trong Set: thêm trên keydown, xóa trên keyup, sau đó trong vòng lặp render kiểm tra keysHeld.has("KeyW"). Điều này tách rời đầu vào khỏi tốc độ khung hình và xử lý nhiều phím đồng thời (di chuyển + nhảy).

Có gì được gửi đến máy chủ khi tôi nhấn phím ở đây không?

Không. Các sự kiện phím được JavaScript bắt cục bộ và hiển thị trên trang này mà không có bất kỳ yêu cầu mạng nào. Mở tab Network trong DevTools, gõ; bạn sẽ thấy không có lưu lượng đi ra. An toàn để kiểm tra trong bất kỳ ngữ cảnh nào, bao gồm khám phá những gì mật khẩu hoặc phím tắt nhạy cảm tạo ra trên bàn phím của bạn.

Công cụ liên quan