You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KeyboardEvent:按下Shift键时如何正确获取数字键的对应编码

解决方案

核心思路是使用 KeyboardEvent 接口原生提供的 code 属性做物理按键识别,该属性返回按键的物理位置标准编码,不受修饰键状态、系统键盘布局影响,完全可以解决你遇到的Shift兼容问题。

实现代码

@HostListener('document:keydown', ['$event'])
handleKeydownEvent(event: KeyboardEvent) {
  let index: number | null = null;

  // 匹配主键盘区的数字键
  if (event.code.startsWith('Digit')) {
    index = Number(event.code.slice(-1));
  }
  // 匹配数字小键盘区的数字键
  else if (event.code.startsWith('Numpad')) {
    index = Number(event.code.slice(-1));
  }

  // 校验是否为有效0-9下标
  if (index !== null && !isNaN(index) && index >= 0 && index <= 9) {
    // 可按需获取修饰键状态
    const modifierKeys = {
      shift: event.shiftKey,
      ctrl: event.ctrlKey,
      alt: event.altKey
    };
    // 执行对应业务逻辑
    doAction(index, modifierKeys);
  }
}

方案优势

  • 无需维护多语言键盘布局映射表,全球各地不同键盘布局下都能正确识别物理数字键
  • 不受修饰键影响,无论是否按下Shift/Ctrl/Alt,只要按下的是0-9对应的物理按键都能正确提取下标
  • 保留了你原本实现的高可读性,逻辑清晰易懂

可选优化

如果不需要在输入框、文本域等可编辑元素中触发该按键逻辑,可以在校验下标前增加过滤逻辑,避免影响用户正常输入:

// 跳过可编辑元素的按键事件
const targetTag = (event.target as HTMLElement).tagName;
if (['INPUT', 'TEXTAREA'].includes(targetTag) || (event.target as HTMLElement).isContentEditable) {
  return;
}

内容的提问来源于stack exchange,提问作者Budda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 20:36:03