HTML按钮不提交表单


370

我有一个表格。在该表格之外,我有一个按钮。一个简单的按钮,如下所示:

<button>My Button</button>

不过,当我单击它时,它将提交表单。这是代码:

<form id="myform">
    <input />
</form>
<button>My Button</button>

该按钮应该做的就是编写一些JavaScript。但是,即使看起来像上面的代码一样,它也会提交表单。当我将标签按钮更改为跨度时,它可以正常工作。但不幸的是,它必须是一个按钮。有什么方法可以阻止该按钮提交表单?像例如

<button onclick="document.getElementById('myform').doNotSubmit();">My Button</button>

3
此问题在现代浏览器中无法再现,并且该问题最初可能是由误解引起的。虽然默认button值为type=submit,但是当button元素位于任何表单之外时,将不提交任何表单。除非可以给出实际的演示(示例文档,浏览器的标识以及描述提交某种形式的观察的描述),否则应以不可复制的方式结束此问题。使用type=button是一种很好的做法,但这并不能使问题真正成为现实。
Jukka K. Korpela 2014年

Answers:


894

我认为这是HTML最令人讨厌的小特性...该按钮必须为“按钮”类型才能不提交。

<button type="button">My Button</button>

更新2019年2月5日:根据HTML生活标准(以及HTML 5规范):

缺失值默认无效值默认是提交按钮状态。


9
@Powerslave任何理由不这样做的原因to use <button>
Sandip

4
@SandipPingle没有理由使用它,除非您需要某种非常复杂的样式。另外,<button>在某些情况下,IE6和IE7(很可能已被淘汰)处理 不正确。此外,<button>它不是100%跨浏览器兼容的,因为<button>在表单中使用时,不同的浏览器可能会为同一浏览器提交不同的值。
Powerslave

35
这是一个很好的答案,但这不是特殊之处。标记中type属性的默认值为。更改为时,没有默认行为。请参阅此处的属性:developer.mozilla.org/en-US/docs/Web/HTML/Element/button<button>submittype=button<button>type
Michael Benjamin

1
那么<button type='submit'>这对我来说太困难了哈哈。无论如何,您的答案都很棒!
divHelper11 '17

2
非特定于表单的元素的默认(因此是隐式)行为是触发潜在的破坏性特定于表单的功能。对于HTML规范来说,这不是一个特殊的设计决定吗?
HonoredMule

36

return false;在onclick处理程序的末尾将完成此工作。然而,这是更好地简单地添加type="button"<button>-它正确的行为,即使没有任何JavaScript的方式。


1
无论如何,不​​提交表单的按钮仅在启用JavaScript的情况下才有用...我同意type =“ button”更干净。
ThiefMaster

2
return false;并非在所有情况下都有效,但在所有情况下type="Button"都可以。即使启用了JavaScript。
brejoc 2014年

15

戴夫·马克尔(Dave Markle)是正确的。从W3School的网站

始终为按钮指定type属性。Internet Explorer的默认类型是“按钮”,而在其他浏览器(和W3C规范)中,默认类型是“提交”。

换句话说,您使用的浏览器遵循W3C的规范。


15

默认情况下,html按钮提交表单。

这是因为即使位于表单外部的按钮也可以充当提交者(请参阅W3Schools网站:http : //www.w3schools.com/tags/att_button_form.asp)。

换句话说,按钮类型默认为“提交”

<button type="submit">Button Text</button>

因此,解决此问题的一种简单方法是使用按钮类型

<button type="button">Button Text</button>

其他选项包括在onclick或单击按钮时的任何其他处理程序的末尾返回false ,或者改为使用<input>标记

要了解更多信息,请查看按钮上Mozilla开发人员网络的信息:https : //developer.mozilla.org/en/docs/Web/HTML/Element/button


3

建议不要使用<Button>标签。请改用<Input type='Button' onclick='return false;'>标签。(使用“ return false”确实不应该发送表格。)

一些参考资料


2
使用<input type="button" />就足够了,而且就足够了return false;-无需同时做这两项。
汤姆(Tom)

我不同意建议不要使用按钮标签。如果不使用它,则会丢失一些您会通过button标签自动获得的辅助功能。我想说实际上建议将button标签用于充当按钮的元素。
CookieMonster

根据您链接的参考资料中的注释:“虽然类型为button的<input>元素仍然是完全有效的HTML,但是更新的<button>元素现在是创建按钮的首选方式。” 因此,这与您所说的完全相反。
jedzej

1

出于可访问性原因,我无法通过多个type=submit按钮将其关闭。到了本机的唯一途径form有多个按钮,但只有一个可以提交击中当表单Enter关键是要确保只有其中之一是type=submit有些则是在其他类型如type=button。这样,就键盘支持而言,在浏览器上处理表单时,您可以从更好的用户体验中受益。


0

对我有用的另一个选项是添加onsubmit =“ return false;”。到表单标签。

<form onsubmit="return false;">

从语义上讲,解决方案可能不如上述更改按钮类型的方法那么好,但是如果您只希望不提交表单元素,那么这似乎是一个选择。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.