2011-03-25 83 views
8

我刚读在http://w3fools.com/#html_forms以下:为什么输入标签不允许直接在表单标签中使用?

非块级元素(如<input>)不直接内部<form>标签直到HTML5有效。

我从来没有听说过这些内容,而且我看过的每个基本的HTML教程似乎都将输入标记直接放在表单标记中。所以我的问题有三个部分:

  • 上述说法是否合法?
  • 为什么会出现这种情况? (这只是一个疏忽,或者是HTML规范的创建者试图通过创建此规则来防止出现特定问题?)
  • 建议使用输入构建表单的建议方法是什么? (我们只是应该直接在表单标签内部创建一个div或表格)
+4

是的,FORM元素的直接子元素必须是块级元素。看到这里:http://vidasp.net/HTML-structure-diagram.html – 2011-03-25 23:26:15

回答

8

它是标准修辞学。

  • 声明是合法的,只要标准变为:在HTML 4.01,在definition for <form>指定它可能只包含块元素或<script>。就世界上每个浏览器都允许的而言,这很好。
  • 我只能猜测他们认为<form>根本不是布局标签,他们希望所有内联元素都包含在块元素中。
  • 是的,你应该在<form>中放置一个<div>,<table>,<p>或其他块表示元素。
+0

这对我来说太奇怪了,规范说“FORM元素充当控件的容器”,并且“表单可以包含文本和标记(段落,列表等)除了形成控件之外,“但是它们不允许它直接包含控件。 – StriplingWarrior 2011-03-26 21:00:53

1

首先我想提一下,HTML教程教你做错事情并不奇怪 - HTML实际上旨在接受任何方式的做事。你可以让标签不封闭,你可以将它们嵌套不正确的东西,这是我个人使用XHTML的原因之一。

该声明似乎是真实的,但由于HTML的设计方式,在实际中并不重要。 XHTML可能禁止这一点。

表单实际上不是任何类型的容器。看起来HTML规范的创建者喜欢块级元素,你应该把所有东西都包含进去。尽管这只是我的看法,但据我所知,如果没有适当的容器,非块级别的元素不应该被使用。 这完全像你不应该把非块级元素放在<blockquote>中。块级元素是其他元素的容器。

一个div,一张桌子 - 我想即使是<p>也是这样做的。

5

以上陈述属实。在HTML中,<输入>标记不是<表格>标记的有效元素。为了使此验证,您需要将<输入>标记与<字段集>或<div>。下面将对此进行说明。

<form action="/" method="post"> 
    <fieldset> 
     Field: <input type="text" name="field" /> 
     <br /> 
     <input type="submit" value="Submit" /> 
    </fieldset> 
</form> 
0

那么,根据HTML 4.01规范(特别是section 17.3),这在技术上是正确的。但是,我不知道任何实际上会给你带来问题的网络浏览器。