我可以将表单标签嵌套在其他表单标签中吗?

Posted

技术标签:

【中文标题】我可以将表单标签嵌套在其他表单标签中吗?【英文标题】:Can I nest form tags in other form tags? 【发布时间】:2011-05-30 00:03:01 【问题描述】:

我可以将<form> 标记放在另一个<form> 标记中吗?

例如:

<form>
  <form>
  </form>
</form>

【问题讨论】:

你的意思是一个表单元素 ;-) 是的,我的意思是表单标签,谢谢我得到答案 Is it valid to have a html form inside another html form?的可能重复 【参考方案1】:

不,嵌套表单是被禁止的。


这在 HTML 4.01 DTD 中表示为:

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

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

这意味着一个 FORM 有一个强制的开始标签,强制的结束标签,并且可以包含 %block 或 SCRIPT 中的任何内容,除了其他 FORM。


XML DTD 不像 SGML DTD 那样具有表现力,因此在 XHTML 中,此规则仅在规范的人类可读文本中指定:

表单不得包含其他表单元素。

——http://www.w3.org/TR/xhtml1/#prohibitions


HTML 5 不是 SGML 应用程序,也没有该语言的官方机器可读描述。它也在文字中表达了这个规则:

内容模型:

流式内容,但没有表单元素后代。

——http://www.w3.org/TR/html5/forms.html#the-form-element

【讨论】:

【参考方案2】:

适用于 XHTML 1.0 Strict。

我什至通过将以下内容粘贴到 http://validator.w3.org/check 来测试验证。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Markup Test</title>
    <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
  </head>
  <body>
    <h1>Markup Test</h1>
    <p>
      This doc contains a form with a nested form and validates at
      <a title="Validate using W3C Markup Validation Service" href="http://validator.w3.org/check?uri=referer">
        http://validator.w3.org/
      </a>
    </p>
    <form action="#">
      <div>
        <form action="#">
        </form>
      </div>
    </form>
  </body>
</html>

但是下面的 Quentin 是正确的:我测试并忽略了打开 结束标记的嵌套表单。出现在子表单标记之前、内部和之后的表单输入元素被视为父表单的成员,包括提交按钮。子表单中对 this.formjavascript 引用引用父表单。如果你给子表单一个 id 并通过getElementById 检索它,那么你会得到一个元素,但.submit() 什么都不做。它基本上是一种形式(父级),其中包含垃圾标签。

【讨论】:

有效不允许。 XML DTD 不像 SGML DTD 那样具有表达力,因此您无法以验证器可以理解的方式表达“无嵌套形式”。见Element Prohibitions:表单不能包含其他表单元素【参考方案3】:

不允许直接在表格内。您的所有 javascript 都将不起作用,并且预期的行为将不存在。

不过,你可以试试这个:

<form name ="1st form">
<...>
<div> <form id="dummy"></form></div>
<...>
<form name = "2nd form">
</form>
<...>
</form>

您需要在您打算使用的 2 个表单之间创建一个虚拟表单。 1 注意事项,1st Form 和 dummy form 之间需要有一些标签。否则这将不起作用。

【讨论】:

【参考方案4】:

你不能嵌套它们,但你可以对元素进行分组...有一个专门用于此的机制,the &lt;fieldset&gt; element,用于对控件/标签进行分组...在 HTML5 中将其与特定表单相关联,禁用内容,等等

【讨论】:

【参考方案5】:

规范不允许嵌套表单(我不确定尝试时会出现什么行为,我没有尝试过)。

不过,a previous question 中有一些关于该主题的有趣讨论。

【讨论】:

【参考方案6】:

不,如果您想拆分表单,请使用&lt;fieldset&gt;。一些浏览器可能能够解析它(没有测试过),但根据 w3 标准,不允许在其他表单中使用表单。

【讨论】:

以上是关于我可以将表单标签嵌套在其他表单标签中吗?的主要内容,如果未能解决你的问题,请参考以下文章

MVC:如何将文件上传和其他表单字段发布到一个操作

form表单嵌套,用标签的form属性来解决表单嵌套的问题

form表单如何嵌套,一个table标签中若是存在多个表单,该如何使他们互不影响

JavaWeb 表格 表单 框架(混合框架,嵌套框架)

html中的表单中怎么嵌套表格

您如何克服 HTML 表单嵌套限制?