【问题标题】:Why is an input tag not allowed directly within a form tag?为什么表单标签中不允许直接输入标签?
【发布时间】:2011-03-25 23:15:17
【问题描述】:

我刚刚在http://w3fools.com/#html_forms阅读了以下内容:

在 HTML5 之前,非块级元素(例如 <input>)在 <form> 标记内直接无效。

我从来没有听说过类似的东西,而且我看到的每一个基本的 HTML 教程似乎都可以将输入标签直接放在表单标签中。所以我的问题分为三个部分:

  • 以上说法合法吗?
  • 为什么会这样? (这仅仅是一个疏忽,还是 HTML 规范的创建者试图通过创建此规则来防止特定问题?)
  • 建议用什么方法来构造带有输入的表单? (我们是否应该直接在表单标签内创建一个 div 或一个表?)

【问题讨论】:

标签: html w3c


【解决方案1】:

这是标准的迂腐。

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

【讨论】:

  • 规范中说“FORM 元素充当控件的容器”和“表单可以包含文本和标记(段落、列表等),这对我来说太奇怪了。表单控件”,但它们不允许它直接包含控件。
【解决方案2】:

以上说法属实。在 HTML 中, 标签不是

标签的有效元素。为了使这个生效,您需要用
标记括起来。如下所示。
<form action="/" method="post">
    <fieldset>
        Field: <input type="text" name="field" />
        <br />
        <input type="submit" value="Submit" />
    </fieldset>
</form>

【讨论】:

    【解决方案3】:

    首先我想提一下,HTML 教程教你做错事并不奇怪——HTML 实际上被设计为接受任何和所有做事方式。你可以不关闭标签,你可以不正确地嵌套它们等等,这是我个人使用 XHTML 的原因之一。

    这句话似乎是正确的,但由于 HTML 的设计方式,它在实践中并不重要。 XHTML 可能禁止这样做。

    表单实际上并不是任何类型的容器。似乎 HTML 规范的创建者喜欢块级元素之类的东西,你应该把所有东西都包装在里面。不过,这只是我对它的看法,但据我所知,如果没有合适的容器,不应该使用非块级元素。 就像您不应该将非块级元素放在&lt;blockquote&gt; 中一样。块级元素是其他元素的容器。

    一个 div,一个表格——我认为即使是 &lt;p&gt; 也能做到这一点。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2019-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-29
        • 1970-01-01
        • 2021-12-30
        • 2010-10-27
        相关资源
        最近更新 更多