问题描述

说我有:

<form method="get" action="something.php">
    <input type="text" name="name" />
</form>

<input type="submit" />

如何在表单之外的提交按钮上提交该表单,我认为 HTML5 中的这个提交的动作属性,但我不知道如果这是完全 cross-browser,如果不是有这样做?

最佳解决方案

据我所知,如果没有 javascript,你不能这样做。

这是规范说的

The elements used to create controls generally appear inside a FORM element, but may also appear outside of a FORM element declaration when they are used to build user interfaces. This is discussed in the section on intrinsic events. Note that controls outside a form cannot be successful controls.

这是我的大胆

submit 按钮被认为是一个控件。

http://www.w3.org/TR/html4/interact/forms.html#h-17.2.1

从评论

I have a multi tabbed settings area with a button to update all, due to the design of it the button would be outside of the form.

为什么不将 input 放在表单中,但是使用 CSS 将其放在页面的其他位置?

次佳解决方案

在 HTML5 中,有 the form attribute 。基本上

<form id="myform" method="get" action="something.php">
    <input type="text" name="name" />
</form>

<input type="submit" form="myform" />

第三种解决方案

一个对我来说非常棒的解决方案,在这里仍然是错误的。它需要在<form> 中有一个视觉上隐藏的<submit><input type="submit"> 元素,以及相关的<label> 元素。看起来像这样:

<form method="get" action="something.php">
     <input type="text" name="name" />
     <input type="submit" id="submit-form" class="hidden" />
</form>

<label for="submit-form">Submit</label>

现在这个链接使您能够通过单击<label> 元素’click’ 形式<submit> 元素。

第四种方案

如果可以使用 jQuery,可以使用这个

<form method="get" action="something.php" id="myForm">
    <input type="text" name="name" />

    <input type="submit" style="display:none" />
</form>

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

<script type="text/javascript">
    $(document).ready(function() {
       $("#myButton").click(function() {
           $("#myForm").submit();
       });
    });
</script>

所以,底线是创建一个像 Submit 这样的按钮,并将真实的提交按钮放在窗体中 (当然是隐藏它),并通过点击’Fake Submit’ 按钮通过 jquery 提交表单。希望它有帮助。

第五种方案

<form method="get" id="form1" action="something.php">

</form>

<!-- External button-->
<button type="submit" form="form1">Click me!</button>

这对我来说有用,有一个表单的远程提交按钮。

第六种方案

尝试这个:

<input type="submit" onclick="document.forms[0].submit();" />

虽然我建议在窗体中添加一个 id,而不是 document.forms[index]

第七种方案

你可以随时使用 jQuery:

<form id="myForm">
  <!-- form controls -->
</form>
<input type="submit" id="myButton">

<script>
$(document).ready(function () {
  $("#myButton").click(function () {
    $("#myForm").submit();
  });
});
</script>

第八种方案

这是一个非常可靠的解决方案,其中包含了最好的想法,包括我的解决方案,突出强调与 Offerein 的问题。没有使用 JavaScript 。

如果您关心与 IE(甚至 Edge 13) 的向后兼容性,则不能使用 form="your-form" attribute

使用标准的提交输入显示无,并在表单之外添加标签:

<form id="your-form">
  <input type="submit" id="your-form-submit" style="display: none;">
</form>

注意使用 display: none; 。这是有意的。使用引导程序的.hidden 类与 jQuery 的.show().hide()冲突,并在 Bootstrap 4 中被废弃。

现在只需为您的提交添加一个标签 (以引导为样式):

<label for="your-form-submit" role="button" class="btn btn-primary" tabindex="0">
  Submit
</label>

与其他解决方案不同,我也使用 tabindex – 设置为 0 – 这意味着我们现在与键盘标签兼容。添加 role="button"属性给它 CSS 样式 cursor: pointer 。 Et 瞧。 (See this fiddle) 。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛