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

Vue.js中如何创建监听Ctrl+[1-9]快捷键的监听器并简化代码

嘿,这个问题我之前也碰到过,用范围判断就能轻松摆脱重复的if语句,给你两种简洁易维护的实现方式:

方案一:直接判断event.key的数字范围

这种方式最直观,因为event.key会直接返回你按下的字符(比如按1就返回"1"),结合正则或者数值范围判断就行:

created() {
  window.addEventListener('keydown', this.switchTab)
},
methods: {
  switchTab(event) {
    // 检查Ctrl键是否按下,同时按下的是1-9的数字
    if (event.ctrlKey && /^[1-9]$/.test(event.key)) {
      const pressedNumber = parseInt(event.key, 10);
      this.changeRoute(pressedNumber);
    }
  },
  changeRoute(pressedNumber) {
    console.log(pressedNumber);
  }
}

小解释:

  • 正则/^[1-9]$/可以快速校验event.key是不是1-9的单个数字字符
  • 用parseInt把字符串转成数字,直接传给changeRoute就能满足你的需求

方案二:利用event.keyCode的数值范围

如果你更习惯用keyCode(虽然它的标准已被标记为废弃,但现代浏览器里依然稳定可用),1-9对应的keyCode是49到57,直接做范围判断就行:

created() {
  window.addEventListener('keydown', this.switchTab)
},
methods: {
  switchTab(event) {
    if (event.ctrlKey && event.keyCode >= 49 && event.keyCode <= 57) {
      // keyCode49对应数字1,减去48就能得到实际按下的数字
      const pressedNumber = event.keyCode - 48;
      this.changeRoute(pressedNumber);
    }
  },
  changeRoute(pressedNumber) {
    console.log(pressedNumber);
  }
}

补充:你的自解方案优化

看到你已经自己摸索出了核心思路,这里可以再调整一下,直接把数字传给changeRoute,完全贴合你的需求:

switchTab(event) {
  if (event.ctrlKey && event.key >= '1' && event.key <= '9') {
    const pressedNumber = parseInt(event.key, 10);
    this.changeRoute(pressedNumber);
  }
},
changeRoute(pressedNumber) {
  console.log(pressedNumber);
}

这样就完美实现了监听Ctrl+1-9的需求,代码简洁还容易维护~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:18:35