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

关于JavaScript中onclick属性执行顺序的技术问询

关于JavaScript中form.submit()后后续代码仍执行的原因分析

核心原因很直接:form.submit()是异步触发页面导航的操作,它不会立刻终止当前的JavaScript执行上下文。

当你在函数A里调用formTest.submit()时,浏览器只是接收到了“要提交表单、刷新/跳转页面”的指令,但这个操作不会马上执行——它会被放到浏览器的任务队列里,等当前正在运行的所有同步代码(也就是函数A里剩下的逻辑)执行完、调用栈清空之后,才会处理这个表单提交的任务。

对应你的代码示例:

<form action="post" name="formTest">
    <button type="button" onclick="A(B)" id="test">test</button>
</form>
<script>
    function A(B) {
        formTest.submit();
        B();
    }

    function B() {
            window.alert('Function B');
    }
</script>

具体执行流程是:

  1. 点击按钮触发onclick事件,调用A(B)
  2. 进入A函数,执行formTest.submit()——浏览器标记“需要提交表单”,但不立即处理
  3. 继续执行下一行B(),弹出alert提示框
  4. 等A函数完全执行完毕,调用栈空了之后,浏览器才会处理表单提交的页面跳转逻辑

如果想让submit()之后的代码不执行,你需要手动终止函数,比如在submit()后面加return;:

function A(B) {
    formTest.submit();
    return; // 终止函数,后续的B()不会执行
    B();
}

内容的提问来源于stack exchange,提问作者上西潤

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:18:11