假设我有:
<form method="get" action="something.php">
<input type="text" name="name" />
</form>
<input type="submit" />
怎样使用在表单外的提交按钮进行表单提交?我知道在HTML5中有一个action属性可以用来提交,但不确定它是否完全跨浏览器兼容。如果不兼容,是否有其他方法实现此功能?
假设我有:
<form method="get" action="something.php">
<input type="text" name="name" />
</form>
<input type="submit" />
怎样使用在表单外的提交按钮进行表单提交?我知道在HTML5中有一个action属性可以用来提交,但不确定它是否完全跨浏览器兼容。如果不兼容,是否有其他方法实现此功能?
在HTML5中,有表单属性。基本上
<form id="myform" method="get" action="something.php">
<input type="text" name="name" />
</form>
<input type="submit" form="myform" value="Update"/>
<button type="submit" form="frmFoo" onclick="!this.form&&$('#'+$(this).attr('form')).submit()">
经过实验发现,this.form指向附加的表单DomElement,否则为null。// 编辑:使用jQuery,当然也可以使用vanilla。 - Adrian FöderINPUT
标签,使其不再是自闭合的?(这是我未成功编辑尝试的更改摘要:“为非XHTML(但HTML5)INPUT修正无效的自闭合标签语法,它是一个空元素(因此不能关闭)。”)谢谢! - Sz.<button type="submit" form="frmFoo" onclick="!this.form && document.getElementById('myform').submit()">
。 - romaricdrigon对我非常有效的一个解决方案在这里还没有提到。它需要在 <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" tabindex="0">Submit</label>
现在,通过单击tabindex
:<label for="submit-form" tabindex="0">提交</label>
。参考这个问题。 - MarthyM据我所知,没有使用javascript是无法实现这个的。
下面是规范的内容:
用于创建控件的元素通常出现在FORM元素内部,但是当它们用于构建用户界面时,也可以出现在FORM元素声明之外。这在内固有事件的部分中进行了讨论。请注意,在表单之外的控件不能成为成功的控件。
这是我加粗的部分
submit
按钮被视为控件。
http://www.w3.org/TR/html4/interact/forms.html#h-17.2.1
从评论中看到:
我有一个多标签设置区域,其中有一个按钮可以更新所有内容,由于设计原因,该按钮将位于表单之外。
为什么不把放在表单内,然后使用CSS将其放置在页面其他位置呢?
<form method="get" id="form1" action="something.php">
</form>
<!-- External button-->
<button type="submit" form="form1">Click me!</button>
这对我有用,可以为表单添加远程提交按钮。
如果您可以使用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 提交表单。希望这能有所帮助。
$('button[form]').click(function (){
var formId = $(this).attr('form');
$('#' + formId).submit();
});
- Snook与另一个解决方案类似,稍作修改:
<form method="METHOD" id="FORMID">
<!-- ...your inputs -->
</form>
<button type="submit" form="FORMID" value="Submit">Submit</button>
您可以通过在组件定义中添加form="yourFormId"
来告诉表单,来自<form>
标记外部组件属于它。
在这种情况下,
<form id="login-form">
... blah...
</form>
<button type="submit" form="login-form" name="login_user" class="login-form-btn">
<B>Log In</B>
</button>
即使按钮位于 <form> 标签之外,只要您将表单名称分配给它,表单仍会愉快地提交。表单认为按钮是其一部分,并且不需要使用JavaScript来提交表单(这可能存在漏洞,例如表单可能会提交但Bootstrap错误/验证未能显示,我已进行测试)。
type="submit"
。 - Greko2015 GuFn试一下这个:
<input type="submit" onclick="document.forms[0].submit();" />
虽然我建议给表单添加一个id
,然后通过该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"
属性。
使用一个标准的提交输入并将其显示设置为none,然后在表单外添加一个标签:
<form id="your-form">
<input type="submit" id="your-form-submit" style="display: none;">
</form>
display: none;
。 这是有意的。使用Bootstrap的.hidden
类会与jQuery的.show()
和.hide()
冲突,并且在Bootstrap 4中已被弃用。<label for="your-form-submit" role="button" class="btn btn-primary" tabindex="0">
Submit
</label>
role="button"
属性使其具有CSS样式cursor:pointer
。Et voila。(看看这个小例子)。Enter
没有任何效果。因此,能够制表符到达它似乎有点毫无意义。有没有一种不使用JavaScript的方法来实现这一点? - Andrew Willems<input... />
自闭合语法,几乎每个人都在这里(也)明显且不正确地使用它,改为使用正确的无关闭标签! :) 赞! - Sz.