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

HTML中表单内的普通button为何会触发表单提交?

问题原因与解决方案

这是一个很常见的HTML细节坑——表单内的<button>元素默认类型是submit!

你可能没注意到,HTML规范里明确规定:当<button>元素嵌套在<form>标签内部时,如果没有显式指定type属性,浏览器会自动把它的类型默认设为submit。这就导致哪怕你给按钮加了onclick事件用来打开新标签页,点击它的时候,浏览器还是会同时触发表单的提交行为,这就是你遇到问题的核心原因。

快速解决办法

最规范且直接的方案,就是给这个按钮显式加上type="button"属性,彻底取消它的默认提交行为:

<button type="button" onclick="window.open('http://www.jthink.net/songkong/buy.jsp','_blank');"> Get License </button>

另外还有一种临时补救方案:在onclick事件末尾加上return false;,手动阻止浏览器执行默认的提交动作,不过这种方式不如设置type属性规范,更推荐前者:

<button onclick="window.open('http://www.jthink.net/songkong/buy.jsp','_blank'); return false;"> Get License </button>

至于为什么移到表单外就正常?因为当<button>不在表单范围内时,它的默认type是button,不会触发任何表单相关的默认行为,自然就只执行你写的打开新标签页的逻辑了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:18:49