onkeydown是JavaScript中用於監聽鍵盤按鍵按下事件的常用方法。當用户按下鍵盤上的任意鍵時,會觸發onkeydown事件,無論該鍵是否有字符與之關聯。
基本概念
- 觸發時機:用户按下鍵盤按鍵時立即觸發(無需等待按鍵釋放)
- 事件順序:onkeydown → onkeypress → onkeyup
- 支持範圍:能識別所有按鍵,包括功能鍵(Ctrl、Shift、箭頭鍵等)
- 與onkeypress的區別:onkeydown在按鍵按下時觸發,onkeypress在按鍵按下並釋放後觸發
代碼示例
1. 基本使用
// HTML中使用
<input type="text" onkeydown="handleKeyDown(event)">
// JavaScript中使用
document.getElementById('myInput').onkeydown = function(event) {
console.log('按鍵按下:', event.key);
};
// 或使用addEventListener
document.getElementById('myInput').addEventListener('keydown', function(event) {
console.log('按鍵按下:', event.key);
});
2. 檢測特定按鍵(如Enter鍵)
// 檢測回車鍵(keyCode為13)
document.getElementById('myInput').addEventListener('keydown', function(event) {
if (event.keyCode === 13) {
console.log('您按下了回車鍵');
event.preventDefault(); // 阻止回車鍵的默認行為(如表單提交)
}
});
// 使用更現代的event.key(推薦)
document.getElementById('myInput').addEventListener('keydown', function(event) {
if (event.key === 'Enter') {
console.log('您按下了回車鍵');
event.preventDefault();
}
});
3. 實用示例:模擬京東搜索框聚焦功能
// 當按下's'鍵時,將焦點移動到搜索框
document.addEventListener('keydown', function(event) {
// 檢測是否按下了's'鍵(keyCode 83)
if (event.keyCode === 83) {
// 獲取搜索框元素
const searchInput = document.getElementById('search-input');
// 如果搜索框存在,將其聚焦
if (searchInput) {
searchInput.focus();
console.log('搜索框已聚焦');
}
}
});
4. 阻止默認行為
document.addEventListener('keydown', function(event) {
// 阻止空格鍵的默認行為(如頁面滾動)
if (event.key === ' ') {
event.preventDefault();
console.log('空格鍵已阻止');
}
// 阻止回車鍵的默認行為
if (event.key === 'Enter') {
event.preventDefault();
console.log('回車鍵已阻止');
}
});
5. 處理功能鍵
document.addEventListener('keydown', function(event) {
// 檢測Ctrl+C組合鍵
if (event.ctrlKey && event.key === 'c') {
console.log('您按下了Ctrl+C');
event.preventDefault(); // 阻止默認的複製行為
}
// 檢測Shift+Enter組合鍵
if (event.shiftKey && event.key === 'Enter') {
console.log('您按下了Shift+Enter');
}
});
與onkeypress和onkeyup的對比
|
事件
|
觸發時機
|
識別功能鍵
|
字母大小寫區分
|