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

textarea的keyup事件属性未正常填充,JSON.stringify仅返回isTrusted

问题解析与解决办法

核心原因

你遇到的情况本质是DOM Event实例的属性特性导致的:

  • DOM事件对象的大多数属性(比如key、keyCode、target等)是访问器属性(getter/setter),而非可枚举的自有属性。
  • JSON.stringify()仅会序列化对象中可枚举的自有属性,所以这些访问器属性不会被包含在序列化结果里,只有isTrusted这种可枚举的属性会被保留。
  • 浏览器控制台的console.log是特殊的:它输出的是对象的引用,当你在控制台展开对象时,才会实时读取所有属性的当前值,所以能看到完整的事件信息,但这并不代表调用console.log时那些属性就已经被填充完成。

验证方法

可以通过查看属性描述符确认这一点:

textarea.addEventListener('keyup', (ev) => {
  console.log(Object.getOwnPropertyDescriptor(ev, 'keyCode'));
  // 输出会显示 enumerable: false
});

解决办法

如果需要序列化事件对象的关键信息,手动提取你需要的属性即可:

textarea.addEventListener('keyup', (ev) => {
  const serializedEvent = {
    key: ev.key,
    keyCode: ev.keyCode,
    targetValue: ev.target.value,
    isTrusted: ev.isTrusted
    // 按需添加其他需要的属性
  };
  console.log(JSON.stringify(serializedEvent));
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 00:25:55