2010-12-23 97 views
10

我可以将<form>标签放在另一个<form>标签内吗?我可以在其他表单标签中嵌入窗体标签吗?

例如:

<form> 
    <form> 
    </form> 
</form> 
+1

你的意思是一个表单元素;-) – 2010-12-23 14:16:17

+0

亚我的意思是表单标签,感谢我得到回答的 – Navruk 2010-12-24 13:21:23

+0

可能重复[有效期是有内另一个HTML表单中的HTML表单?](http://stackoverflow.com/questions/555928/is-it-valid-to-has-a-html-form-inside-another-html-form) – 2015-06-04 23:39:44

回答

17

否,嵌套形式是被禁止的。


这在HTML表示4.01的DTD为:

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

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

这意味着一种形式有一个强制性的开始标记,强制结束标签,并可以包含任何东西在%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

+0

感谢您的回答。 – Navruk 2010-12-24 13:21:50

0

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

+0

感谢您的回答 – Navruk 2010-12-24 13:22:07

+0

这需要一些阐述... – Cerin 2014-03-26 16:56:45

1

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

但是,在a previous question中有一些关于该主题的有趣讨论。

1

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

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> 

无论其下面昆汀是正确的:我测试和嵌套形式开口结束标记被忽略。在子表单标签之前,之内和之后出现的表单输入元素被视为父表单的成员,包括提交按钮。从子表单中引用this.form的JavaScript引用父表单。如果你给孩子一个身份证,并通过getElementById找回,那么你会得到一个元素,但.submit()什么都不做。它基本上是一个带有垃圾标签的表单(父项)。

-1

直接在表格内是不允许的。你所有的javascript都无法运行,预期的行为将不会在那里。

但是,你可以试试这个:

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

你需要在你打算使用2种形式之间创建一个虚拟的形式。 1注意,1st Form和虚拟表单需要在它们之间有一些标签。否则这将无法正常工作。