keydown事件是jQuery中用於監聽鍵盤按鍵按下事件的常用方法。當用户在頁面上按下任意鍵時,會觸發keydown事件。與keypresskeyup事件相比,keydown事件會捕獲所有按鍵(包括功能鍵如回車、方向鍵等),而keypress僅捕獲能產生字符的按鍵。

事件觸發順序

keydown → keypress → keyup

基本語法

// 觸發被選元素的keydown事件
$(selector).keydown();

// 添加函數到keydown事件
$(selector).keydown(function(event) {
  // 事件處理代碼
});

獲取按鍵信息

推薦使用event.which屬性來獲取按鍵的代碼,它在不同瀏覽器中表現一致:

$(selector).keydown(function(event) {
  console.log("按鍵碼:", event.which);
  
  // 例如:判斷是否為回車鍵(13)
  if (event.which === 13) {
    console.log("用户按下了回車鍵");
  }
});

實用代碼示例

1. 基礎示例:改變輸入框背景顏色

<!DOCTYPE html>
<html>
<head>
  <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
  <style>
    input {
      padding: 8px;
      width: 300px;
    }
  </style>
</head>
<body>
  <input type="text" placeholder="輸入一些文字">
  
  <script>
    $("input").keydown(function() {
      $(this).css("background-color", "#FFFFCC");
    });
  </script>
</body>
</html>

2. 回車鍵觸發搜索功能(推薦)

$(document).ready(function() {
  $('#searchInput').on('keydown', function(event) {
    // 判斷是否為回車鍵(keyCode=13)
    if (event.which === 13) {
      // 阻止默認的回車提交行為
      event.preventDefault();
      
      // 獲取搜索關鍵詞
      var keyword = $.trim($(this).val());
      
      // 簡單驗證
      if (keyword.length === 0) {
        alert('請輸入搜索內容');
        return;
      }
      
      // 執行搜索邏輯(可替換為AJAX請求)
      console.log('正在搜索:', keyword);
      // performSearch(keyword);
    }
  });
});

3. 實現快捷鍵(如Ctrl+S保存)

$(document).on('keydown', function(event) {
  // 檢測Ctrl+S組合鍵
  if (event.ctrlKey && event.which === 83) {
    console.log('Ctrl+S 被按下');
    // 阻止瀏覽器默認行為
    event.preventDefault();
    // 執行保存操作
    saveContent();
  }
});

function saveContent() {
  console.log('正在保存內容...');
  // 保存邏輯
}

4. 在輸入框中插入字符後繼續鍵入

$("#myInput").keydown(function(event) {
  // 在按下空格鍵時插入"Hello"
  if (event.which === 32) {
    $(this).val($(this).val() + "Hello");
    event.preventDefault(); // 阻止默認的空格鍵行為
  }
});

注意事項

  1. 事件綁定元素keydown事件應綁定在輸入框(input)或文本區域(textarea)上,而不是按鈕或表單本身。
  2. 阻止默認行為:當處理回車鍵等特殊按鍵時,記得使用event.preventDefault()阻止默認行為(如表單提交導致頁面刷新)。
  3. 兼容性:推薦使用event.which代替event.keyCode,因為它在不同瀏覽器中表現更一致。
  4. 元素焦點keydown事件僅在具有焦點的元素上觸發,確保輸入框已獲取焦點。
  5. 全局監聽:如需監聽整個頁面的按鍵(如全局快捷鍵),應將事件綁定到document對象上。
  6. 避免阻塞UI:在事件處理函數中不要使用alert()等會阻塞頁面的函數,以免影響用户體驗。

常用按鍵的keyCode參考

按鍵

keyCode

回車

13

空格

32

A-Z

65-90

0-9

48-57

方向鍵(左)

37

方向鍵(上)

38

方向鍵(右)

39

方向鍵(下)

40

Ctrl

17

Shift

16

Alt

18