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

表单内部事件无法向上传播的问题求助

表单内部事件无法向上传播的问题求助

各位大佬求助!我遇到一个离谱到炸的问题——用了整整4年的老代码突然罢工了!这4年来我一直靠同一段逻辑:在contenteditable的span元素上监听回车按键,触发submit事件后让它冒泡到外层的form上,一直都稳得一批。结果就在一小时前,这逻辑突然失效了,form完全接收不到span传上来的submit事件!

我赶紧写了个极简的测试用例排查问题:

<form id="form">
  <span id="input">input</span>
</form>
<script>
// 用来打印事件触发信息的函数
function log(event){
  const logEl = document.createElement("div");
  logEl.textContent = `${event.target.nodeName} ${event.type}`;
  document.body.appendChild(logEl);
}

// 给form绑定submit监听
form.addEventListener("submit", log);

// 手动触发submit事件的函数
function propagate(input){
  // 给span触发带冒泡的submit事件
  input.dispatchEvent(new Event("submit", {bubbles: true}));
  // 给父元素也触发一次
  input.parentNode.dispatchEvent(new Event("submit", {bubbles: true}));
}

// 执行触发逻辑
propagate(input);
</script>

我还做了个对比测试:把外层的form换成div,结果完全正常——能打印出SPAN submit和DIV submit两行日志。但换回form之后,就只输出FORM submit这一行,span触发的submit事件仿佛凭空消失了一样!

我一直以为,只要事件设置了bubbles: true,就会顺着DOM树向上冒泡,作为父元素的form没道理接不到啊?而且这逻辑跑了4年都没出问题,突然就不行了,我实在摸不着头脑。难道submit事件在form元素上有什么特殊的冒泡规则?还是说我之前4年都是“误打误撞”才生效的?

  • 预期结果:页面上打印两行内容:SPAN submit、FORM submit
  • 实际结果:只打印出FORM submit一行

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 06:57:58