submit按钮onclick中validateForm()后return false的作用探究
嘿,这个问题问得特别到位!我来给你拆解这里面的关键逻辑:
先搞懂submit按钮的默认行为:当你点击原生的
<input type="submit">按钮时,浏览器会自动触发表单的默认提交流程——不管你有没有写自定义的onclick事件,它都会尝试把表单数据发送到action指定的地址。为什么需要
return false?
你的代码里,validateForm()函数在验证通过时会手动调用document.myForm.submit()来提交表单。如果没有return false,这时候会发生两次提交:一次是你手动触发的submit(),另一次是按钮本身的默认提交行为。虽然你测试时没看出明显差异,但在实际场景中,这可能导致后端收到重复请求,比如重复创建数据、重复执行操作等问题。
而当验证不通过时(比如姓名为空),validateForm()不会调用submit(),这时候如果没有return false,按钮的默认提交行为依然会触发,表单会直接提交,你的错误提示刚显示就会被页面跳转覆盖,完全达不到验证的目的。return false的核心作用:它会阻止submit按钮的默认提交行为,让表单的提交完全由你的validateForm()逻辑来控制——只有当验证通过时,才通过手动调用submit()完成提交;验证不通过时,就只显示错误提示,不会触发默认提交。
如果想直观验证,你可以打开浏览器开发者工具的网络面板:去掉return false后,输入合法内容点击提交,会看到两个相同的请求发送到formHandler.jsp,这就是重复提交的直接证据。
内容的提问来源于stack exchange,提问作者Peng

