2010-08-07 58 views
140

我们是否可以在另一个表单中有一个表单?这有什么问题吗?表单内部的表单,好吗?

+2

即使不是由OP问,[这里](HTTP://计算器.com/a/10833860/239527)在一个表单中有多个按钮的合适解决方案。 – 2013-10-09 15:33:44

回答

179

虽然在一个HTML页面中可以有多个<form>元素,但不能将它们嵌套。

4

是的。这是错误的。它不会工作,因为它是错误的。大多数浏览器只会看到一种形式。

http://www.w3.org/MarkUp/html3/forms.html

+4

HTML 3规范不是一个很好的链接 - 它没有达到推荐状态而死亡。 – Quentin 2010-08-07 11:27:38

+1

为什么链接到旧规格? Html 3.0?有更新的规范... – Oded 2010-08-07 11:27:50

+0

这是唯一一个在描述开始时指定关于此拦截(以及第一个Google搜索结果)的规范。在其他情况下,我只看到有关HTML4和XHTML的论坛讨论导致相同的结果。一个论坛帖子甚至提到了一些关于HTML4的内容,尽管我从来没有听说过它,也找不到任何示例或证据。 – AlexanderMP 2010-08-07 11:31:22

73

号HTML明确禁止嵌套形式。

HTML 5 draft

内容模型: 流量的内容,但没有表单元素后裔。

HTML 4.01 Recommendation

<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM) -- interactive form -->

(注意 - (FORM)一节)。

3

这不是有效的XHTML必须有嵌套窗体。但是,您可以使用多个提交按钮并使用服务器端脚本根据用户点击哪个按钮来运行不同的代码。

3

不,我们不能另一种形式中嵌套形式这样

<form name='form1'> 
     <form name='form2'> 
      //some code here 
     </form> 
</form> 

它会在某些情况下工作,但不推荐用于通用平台。您可以在单个窗体中使用大量的SUBMIT按钮,但不能适当地管理嵌套窗体。

8

如果你有一个主表单,并且被迫有一个“带有表单的表单”这里是你可以做的......在我的情况下,我有一个在globalHeader中的链接,我想在它执行一个帖子时被点击:

实例形式后与链接按钮提交:

取而代之的是形式...换你输入一个div:

<div id="gap_form"><input type="hidden" name="PostVar"/><a id="myLink" href="javascript:Form2.submit()">A Link</a></div> 

js文件:

$(document).ready(function() { 
(function() { 
    $('#gap_form').wrap('<form id="Form2" action="http://sitetopostto.com/postpage" method="post" target="_blank"></form>'); 
})();}); 

这将包裹一切表格内的div“gap_form”内的所有内容,链接将提交该表单。我现在有一个确切的例子在一个页面上工作...(在我的例子中...你可以通过重定向到一个新页面并在该页面上提交表单来完成同样的事情......但我更喜欢这样)

+5

为什么选择downvote工作解决方案?你不应该downvote没有留下反馈,为什么... – 2013-06-10 13:00:11

+22

好吧,downvote和解释。 (1)这不能解决“表单内的表单”的固有问题。是的,你已经欺骗浏览器嵌套形式。恭喜。但是现在你的文档是无效的,并且浏览器有许可证可以做任何事情。我保证有一个浏览器会引发错误。 (2)如果出于任何原因JS被禁用,脚本不想加载,或者其他任何原因,这将会打乱所有人。也许你不关心这个,但依靠JS来解决你的混乱问题,而不是首先创建有效的HTML是一种糟糕的设计。 – cHao 2013-08-07 08:38:32

8

嵌套表单不受支持,不属于w3c标准(正如你们许多人所说的)。

但是HTML5增加了对输入的支持,这些输入不必是任何形式的后代,但可以通过使用“form”属性以多种形式提交。这并不完全允许嵌套窗体,但通过使用此方法,可以模拟嵌套窗体。

“form”属性的值必须是表单的id,或者在多个表单的情况下,将表单id与空格分开。

你可以阅读更多here

4

另一种解决办法是启动包含其自身形式

+0

你有一个例子吗? – 2017-04-26 16:48:21

69

表格嵌套可以用新的HTML5输入元素的形式属性来实现一个模态窗口。尽管我们没有在结构上嵌套表格,但是投入的评估方式是以自己的形式进行的。在我的测试中,除IE(IE11)外,3种主流浏览器都支持这一功能。表单嵌套限制是HTML UI设计的一大障碍。

这里是一个示例代码,当您单击保存按钮,你应该看到 “2次3成功”(原件http://www.impressivewebs.com/html5-form-attribute/):

<form id="saveForm" action="/post/dispatch/save" method="post"></form> 
<form id="deleteForm" action="/post/dispatch/delete" method="post"></form> 

<div id="toolbar"> 
    <input type="text" name="foo" form="saveForm" /> 
    <input type="hidden" value="some_id" form="deleteForm" /> 
    <input type="text" name="foo2" id="foo2" form="saveForm" value="success" /> 

    <input type="submit" name="save" value="Save" form="saveForm" onclick="alert(document.getElementById('deleteForm').elements.length + ' ' + document.getElementById('saveForm').elements.length + ' ' + document.getElementById('saveForm').elements['foo2'].value);return false;" /> 
    <input type="submit" name="delete" value="Delete" form="deleteForm" /> 
    <a href="/home/index">Cancel</a> 
</div> 
+9

这确实是我们一直在等待的!耻辱的IE ...总是在其余的......其后...这使得这个伟大的想法对公共网站没用... – 2015-05-12 15:35:31

+0

_3主要浏览器支持this_ ...其余的是休息;) – 2016-03-30 19:48:16

+0

这是很好知道。我过去使用自定义数据属性和JavaScript实现了它,当时我可能只包含一个html5填充库。 – 2017-03-22 18:10:51