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

时间:2010-12-23 14:14:51

标签: html forms

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

例如:

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

6 个答案:

答案 0 :(得分:19)

不,禁止嵌套表格。


这在 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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

根据规范不允许使用嵌套表单(我不确定尝试时的行为是什么,我还没试过)。

然而,在a previous question中对该主题进行了一些有趣的讨论。

答案 3 :(得分:0)

不,如果要拆分表单,请使用<fieldset>。有些浏览器可能能够解析它(没有测试过),但根据w3标准,不允许使用其他形式的表单。

答案 4 :(得分:0)

适用于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.form的JavaScript引用引用父表单。如果你给孩子形成一个id并通过getElementById检索它,那么你得到一个元素,但.submit()什么都不做。它基本上是一个表格(父母),里面有垃圾标签。

答案 5 :(得分:-1)

不允许直接在表格内。您的所有JavaScript都无法正常工作,并且预期的行为也不会存在。

但是,你可以试试这个:

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

您需要在要使用的2个表单之间创建一个虚拟表单。需要注意的是,第1表格和虚拟表格需要在它们之间加上一些标签。否则这将无效。