首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JavaScript keyCode 差異解析:keypress vs keydown 事件鍵碼相差 32 的原因

     編輯:程式設計綜合問答

現象重現

document.addEventListener("keypress", e => alert("press:" + e.keyCode));
document.addEventListener("keydown", e => alert("down:" + e.keyCode));

按下 w 鍵:keypress 彈 119(小寫 w),keydown 彈 87(大寫 W),相差 32。

根本原因

大小寫字母 ASCII 碼相差 32('a' - 'A' = 32),故觀測到固定差值。

現代最佳實踐:棄用 keyCode

keyCode、charCode、which 均已棄用,推薦使用:

  • event.key:字符值("a", "Enter", "Shift")。
  • event.code:物理鍵位("KeyA", "Enter", "ShiftLeft")。
input.addEventListener('keydown', e => {
    if (e.code === 'KeyA') { /* 物理 A 鍵 */ }
    if (e.key === 'a') { /* 輸入字符 a */ }
});

兼容性處理

const getChar = (e) => e.key || String.fromCharCode(e.charCode || e.keyCode);
const getKeyCode = (e) => e.code || e.keyCode; // 過渡期兼容

參考資源

詳細表格見:JavaScript Event KeyCode 對照表

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
事件keyCode 含義對應值
keydown/keyup鍵盤物理按鍵代碼大寫字母碼(A=65...Z=90)
keypress字符 ASCII/Unicode 代碼實際輸入字符碼(a=97...z=122)