严格的doctype - 表单和输入元素

时间:2010-06-05 23:51:28

标签: html doctype web-standards

有没有人知道严格doctype背后的原因,不允许输入元素是表单元素的直接后代。我觉得很烦人,我必须在另一个块级元素中包含一个提交按钮,这是一个块级元素,例如fieldset或div。但是,我无法在任何地方找到答案,为什么会这样。

1 个答案:

答案 0 :(得分:2)

因此,如果您尝试将输入直接放入没有容器元素的表单中,并在xhtml 1.0 strict下验证,则会收到此警告:

  

文档类型不允许元素   这里“输入”;缺少一个“p”,   “h1”,“h2”,“h3”,“h4”,“h5”,“h6”,   “div”,“pre”,“address”,“fieldset”,   “ins”,“del”开始标记✉   提到的元素是不允许的   出现在你的上下文中   放置它;另一个提到   元素是唯一的元素   两者都允许,并且可以包含   元素提到。这可能意味着   你需要一个包含元素,或者   可能你已经忘记了   关闭上一个元素。

     

此消息的一个可能原因是   你试图放一个   块级元素(例如“< p>”或   内联元素中的“< table>”)   (例如“< a>”,“< span>”或   “<字体>” 中。)

如果你看一下表单元素(http://www.w3.org/TR/html4/interact/forms.html#h-17.3)的W3C定义,你可以看到元素的内容模型被定义为“%block”。

  

<!元素表格 - - (%block; | SCRIPT)+    - (表格) - 互动表格 - >

如果您按照“%block”链接(http://www.w3.org/TR/html4/sgml/dtd.html#block)引导您到定义为这些元素类型的元素。那些是:

<!ENTITY % block
     "P | %heading; | %list; | %preformatted; | DL | DIV | NOSCRIPT |
      BLOCKQUOTE | FORM | HR | TABLE | FIELDSET | ADDRESS">

因此,正如您所看到的,W3C没有将输入或按钮定义为块级元素。您可以在该页面中搜索“输入”,并找到它的内容类型为“formctrl”:

<!ENTITY % formctrl "INPUT | SELECT | TEXTAREA | LABEL | BUTTON">

而且,实际上,输入元素默认显示为更多内联块而不是块,因为它们不会在它们之前/之后引起换行。因此,不仅仅是内联元素和块级元素。

所以,最后,表单需要它的直接子节点是块级元素,输入元素不符合条件。我希望能清除一切。