有人知道为什么严格的文档类型不允许将输入元素直接作为表单元素的子元素吗?我发现我必须将提交按钮(一个块级元素)包装在另一个块级元素(如fieldset或div)中,这让我很烦恼。然而,我无法找到任何关于为什么这样做的答案。
有人知道为什么严格的文档类型不允许将输入元素直接作为表单元素的子元素吗?我发现我必须将提交按钮(一个块级元素)包装在另一个块级元素(如fieldset或div)中,这让我很烦恼。然而,我无法找到任何关于为什么这样做的答案。
如果您在这里查看W3C对表单元素的定义(http://www.w3.org/TR/html4/interact/forms.html#h-17.3),您会发现该元素的内容模型被定义为“%block”。文档类型不允许出现元素"input";缺少其中之一:"p"、"h1"、"h2"、"h3"、"h4"、"h5"、"h6"、"div"、"pre"、"address"、"fieldset"、"ins"、"del"的开始标签。✉ 所提到的元素不允许出现在您放置它的上下文中;其他提到的元素是唯一允许在那里出现并可以包含所提到的元素。这可能意味着您需要一个包含元素,或者可能是您忘记关闭先前的元素。
导致此消息的一个可能原因是,您尝试将块级元素(如"<p>"或"<table>")放入内联元素(如"<a>"、"<span>"或"<font>")中。
如果您跟随“%block”链接(http://www.w3.org/TR/html4/sgml/dtd.html#block),就会找到那些被定义为此类元素的元素。这些元素包括:<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM) -- interactive form -->
<!ENTITY % block
"P | %heading; | %list; | %preformatted; | DL | DIV | NOSCRIPT |
BLOCKQUOTE | FORM | HR | TABLE | FIELDSET | ADDRESS">
<!ENTITY % formctrl "INPUT | SELECT | TEXTAREA | LABEL | BUTTON">