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

安卓端Chrome触发keydown事件时keyCode、which始终返回229问题求助

问题成因

该问题是安卓版Chrome浏览器符合标准的已知行为:
keyCode与which本身属于已被Web标准废弃的API,不同浏览器的实现逻辑本身就存在差异。当浏览器检测到当前按键由输入法进行处理(比如使用拼音、五笔等带联想的非原生英文输入法、正在进行组合输入)时,按照W3C规范会返回固定值229标识当前输入尚未完成,安卓Chrome的实现逻辑中默认会触发该机制,因此所有按键都会返回229,而火狐安卓、iOS各浏览器的输入处理逻辑不同,因此不会触发该问题。

解决方案
  • 优先使用标准推荐的KeyboardEvent.key或KeyboardEvent.code属性替代废弃的keyCode、which:
    • KeyboardEvent.key返回按下按键对应的实际字符,比如按小写a返回"a",按回车键返回"Enter"
    • KeyboardEvent.code返回物理按键的固定标识,比如无论大小写、输入法状态,按下键盘左侧的A键都会返回"KeyA"
      以上两个属性在所有主流移动端浏览器都有完善兼容,不会出现返回229的异常问题,修改后的代码示例如下:
    @HostListener('keydown', ['$event'])
    onKeyDown(evt: KeyboardEvent) {
        console.log('按键字符 : ' + evt.key);
        console.log('物理按键标识 : ' + evt.code);
        // 示例:判断是否按下回车键
        if (evt.key === 'Enter') {
          // 对应业务逻辑
        }
        ....
    }
    
  • 若业务场景需要获取用户输入的完整内容,可监听input事件或者compositionend事件:compositionend会在输入法组合输入完全结束后触发,input事件会在输入框内容发生变化时触发,两种事件都可以拿到准确的输入结果,无需依赖键盘事件的keyCode属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:39:03