为什么不在p中嵌套形式验证为XHTML

时间:2009-06-20 17:13:19

标签: xhtml forms

以此XHTML代码段为例:

<!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" xml:lang="en" lang="en">
<head>
  <title>A webpage</title>
</head>
<body>
  <p>
    <form action="something.php" method="get">
      <input type="submit" value="Hello"/>
    </form>
  </p>
</body>
</html>

树应该有效,但是这不能在浏览器中正确解析。

5 个答案:

答案 0 :(得分:57)

查看使用http://validator.w3.org

尝试时收到的错误消息

除了警告您没有指定字符编码(并因此假设为UTF-8)之外,主要错误是<p>不允许包含非内联内容。您可以完全删除<p></p>,也可以将其移至<form>

至于“为什么”,这是因为它是如何在模式中定义的,它定义什么是什么,什么是无效的XHTML。如果您查看this section of the XHTML definition,您会看到<p>仅允许包含文字或'内联'(非'封锁')标记。但是,<form>计为“阻止”内容而不是“内联”内容。

换句话说,表单可以包含段落,但段落不能包含表单。

答案 1 :(得分:1)

根据this,因为:

  

第8行,第44列:文档类型   这里不允许元素“形式”;失踪   “对象”,“ins”,“del”,“map”之一   开始标记✉   提到的元素是不允许的   出现在其中的上下文中   你放了它;另一个提到   元素是唯一的元素   两者都允许,并且可以包含   元素提到。这可能意味着   你需要一个包含元素,或者   可能你已经忘记了   关闭上一个元素。

     

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

     

第9行,第40列:文档类型   这里不允许元素“输入”;   缺少“p”,“h1”,“h2”,“h3”之一,   “h4”,“h5”,“h6”,“div”,“pre”,   “地址”,“字段集”,“ins”,“del”   起始标签       input type =“submit”value =“Hello”提到的   元素不允许出现   你放置它的背景;   其他提到的元素是   只有那些都允许在那里   并且可以包含提到的元素。   这可能意味着你需要一个   包含元素,或者可能包含元素   你忘了关闭以前的   元件。

     

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

答案 2 :(得分:-1)

尝试使用W3C Markup Validator,它会告诉您大多数(X)HTML和CSS文档无效。

答案 3 :(得分:-2)

你不能把表格放在段落里面。写得像这样:

<body>
  <form action="something.php" method="get">
  <p>
    <input type="submit" value="Hello"/>
  </p>
  </form>
</body>

答案 4 :(得分:-3)

我使用您的HTML代码通过validator.w3.org运行测试,结果是您需要交换P和FORM标记,以便将其作为有效的W3C HTML传递。

<!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" xml:lang="en" lang="en">
<head>
  <title>A webpage</title>
</head>
<body>
  <form action="something.php" method="get">
    <p>
      <input type="submit" value="Hello"/>
    </p>
  </form>
</body>
</html>