我可以让 <button> 不提交表单吗?

IT技术 javascript html jquery jquery-ui htmlbutton
2021-01-18 17:47:11

我有一个表格,有 2 个按钮

<a href="index.html"><button>Cancel changes</button></a>

<button type="submit">Submit</button>

我也在它们上面使用 jQuery UI 的按钮,就像这样

$('button').button();

但是,第一个按钮也会提交表单。我会认为如果它没有type="submit",它就不会。

显然我可以做到这一点

$('button[type!=submit]').click(function(event) { event.stopPropagation(); });

但是有没有一种方法可以阻止后退按钮在没有 JavaScript 干预的情况下提交表单?

老实说,我只使用了一个按钮,所以我可以用 jQuery UI 来设计它。我尝试调用button()链接,但它没有按预期工作(看起来很丑!)。

6个回答

元素type属性button 的默认值“提交”。将其设置type="button"为生成不提交表单的按钮。

<button type="button">Submit</button>

HTML 标准的话来说:“什么都不做”。

2021-03-17 17:47:11
太感谢了!当答案本身很简单时,我已经坚持了一段时间。简单是关键!
2021-03-17 17:47:11
此外,<input type=text>如果在同一表单中有一个属性 type="submit"(或为空)的按钮,则当您按下 Enter 键时,它会提交表单
2021-03-29 17:47:11

button元素的默认类型为submit

您可以通过设置以下类型使其不执行任何操作button

<button type="button">Cancel changes</button>
@B.ClayShannon 不是。您可以使用服务器端代码在单击按钮时返回相同的页面,但它仍会重新加载页面。最终,按钮是文档的一部分,因此告诉浏览器您希望它如何操作的唯一方法是 HTML 和 JavaScript。
2021-03-20 17:47:11

只需使用良好的旧 HTML:

<input type="button" value="Submit" />

如果您愿意,请将其包装为链接的主题:

<a href="http://somewhere.com"><input type="button" value="Submit" /></a>

或者,如果您决定希望 javascript 提供一些其他功能:

<input type="button" value="Cancel" onclick="javascript: someFunctionThatCouldIncludeRedirect();"/>
使用具有适当类型属性的标准按钮控件是“好的旧 html”,并且可以创建更简单的标记。
2021-03-25 17:47:11
如果在某些浏览器中它具有默认类型的提交而在其他浏览器中具有默认类型的按钮,这显然并不简单。oop,即使只有默认类型的提交也会使事情变得比 IMO 所需的更复杂。应该有标记可以轻松提供一个什么都不做的按钮。还有:<input type="button" />
2021-03-25 17:47:11
@ JGB146:仅仅因为不是所有的浏览器默认的相同的值并不意味着他们不会尊重正确的类型,如果是手动设置(如由jleedev建议不提问题,特别要求的方式来做到这一点。没有JavaScript而你的答案没有考虑到这一点。
2021-03-29 17:47:11
+1 我已经多次使用这种精确的技术,它对我来说一直很有效。一种变体是,如果您需要根据某些客户端计算取消服务器端按钮的回发事件,则可以包含 window.event.returnValue = false; 在您的按钮的客户端 onclick 事件中执行的代码中......也就是说,如果使用自定义验证器控件不会为您减少芥末:)
2021-03-30 17:47:11
@JGB146:Button是 HTML 中的容器。这允许您放置图像或表格之类的东西(不确定为什么要这样做,但您可以)等,input但不支持。两者之间存在差异,每个都有其适当的用例。
2021-04-06 17:47:11
<form onsubmit="return false;">
   ...
</form>
您的回答禁用了提交表单的所有传统方式,而不仅仅是一个按钮。OP 的问题更多是关于仅禁用特定按钮,但保持表单可提交。
2021-03-14 17:47:11

老实说,我喜欢其他答案。简单,无需进入JS。但我注意到你问的是 jQuery。因此,为了完整起见,在 jQuery 中,如果您使用 .click() 处理程序返回 false,它将否定小部件的默认操作。

请参阅此处的示例(以及更多好东西)。 这也是文档

简而言之,使用您的示例代码,请执行以下操作:

<script type="text/javascript">
    $('button[type!=submit]').click(function(){
        // code to cancel changes
        return false;
    });
</script>

<a href="index.html"><button>Cancel changes</button></a>
<button type="submit">Submit</button>

作为一个额外的好处,有了这个,您可以摆脱锚标记而只使用按钮。

奇怪的是,添加e.preventDefault()并没有阻止提交(以 开头function(e))。
2021-03-27 17:47:11