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

监听body keypress事件按/聚焦搜索框时自动填入/字符如何解决

问题根因

这个bug的成因很简单:你只执行了搜索框聚焦的逻辑,没有拦截斜杠键本身的默认输入行为。斜杠键触发的字符输入动作会在你的事件回调执行完成后触发,这时候搜索框已经拿到焦点,/自然就被输入进去了。

修复方法

在判定按下斜杠键的分支里,调用事件对象的preventDefault()方法,阻止按键默认的字符输入行为即可。
额外建议补充一层判断:如果用户当前已经在输入框、文本域这类可编辑元素里输入内容,就不要触发这个快捷键逻辑,否则会干扰用户正常输入。

修复后的代码参考:

document.body.onkeypress = (e) => {
  // 当前焦点在可输入元素上时,不触发快捷键
  const activeElTag = document.activeElement.tagName.toLowerCase()
  if (['input', 'textarea'].includes(activeElTag)) return

  // 匹配斜杠键,优先用e.key判断可读性更好,不需要记键码值
  if (e.key === '/' || e.which === 47) {
    e.preventDefault() // 核心:拦截斜杠的默认输入行为
    searchInput.focus()
  }
}
注意事项

如果后续改用keydown事件实现同类全局快捷键,也需要做相同的默认事件拦截,否则依然会出现字符意外输入的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:27:23