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

非键盘触发事件时JavaScript出现keyCode属性未定义错误

嘿,我来帮你搞定这个问题!

你遇到的错误根源很明确:当clear方法不是通过键盘事件触发时,e参数根本没有被传入,也就是undefined。而你原代码里只在调用preventDefault()前判断了e是否存在,但后面直接访问e.keyCode时没做检查,这就导致了报错。

这里有几种靠谱的修复方案,你可以根据自己的环境选择:

方案1:完整检查e的存在性

把两个操作都包裹在e存在的判断里,确保不会访问undefined的属性:

Fileinput.prototype.clear = function(e) { 
  if (e) {
    e.preventDefault(); 
    if(e.keyCode == 27) return; 
  }
}

方案2:使用可选链操作符(ES2020+)

这是现代JS里最简洁的写法,可选链?.会自动判断前面的对象是否存在,不存在就直接返回undefined,不会报错:

Fileinput.prototype.clear = function(e) { 
  e?.preventDefault(); 
  if(e?.keyCode === 27) return; 
}

方案3:给参数设置默认空对象

如果需要兼容较老的JS环境,可以给e设置一个默认的空对象,这样即使没传参数,访问e.keyCode也只会得到undefined,不会报错:

Fileinput.prototype.clear = function(e = {}) { 
  if (e.preventDefault) {
    e.preventDefault(); 
  }
  if(e.keyCode === 27) return; 
}

另外提个小建议:keyCode已经是被废弃的API了,现在更推荐使用e.key或者e.code,比如判断e.key === 'Escape',这样代码可读性更好,也更符合标准规范哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:06:42