为什么W3C验证服务说这不是有效的XHTML?

时间:2012-10-02 12:38:14

标签: html forms input validation

有人可以告诉我为什么W3C验证服务会说这段代码无效吗?

<!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>this is the title of the web page</title>
</head>
<body>

<form action="formscript.php" method="post">
    first name:<input type="text" name="firstname" />

    <input type="submit" />
</form>

</body>
</html> 

2 个答案:

答案 0 :(得分:1)

我尝试了两个代码,验证器说问题代码有效,因为XHTML 1.0 Transitional。

无论如何,这里的问题是你的<fieldset>内没有<form>,文字<input>没有<label>

<form action="formscript.php" method="post" name="thisform">
  <fieldset>
    <label for="firstname">first name:</label>
    <input type="text" name="firstname" />

    <input type="submit" />
  </fieldset>
</form>

不要忘记DOCTYPE

答案 1 :(得分:0)

如果在开始时添加了XHTML 1.0 Transitional文档类型声明,则最初发布的标记会生成有效的XHTML 1.0 Transitional文档。

由@adamjansch编辑,使用XHTML 1.0 Strict文档类型声明,它无效,并且可能是使用该文档类型声明进行验证。然后第一条错误消息是“此处不允许使用字符数据”,其中包含可能的原因的一些解释,包括“将文本直接放在文档正文中而不将其包装在容器元素中(例如<p>aragraph</p>)”。这很接近:问题是在XHTML 1.0 Strict中,form元素可能只有块级子元素。

这意味着任何文本和文本级标记(如input)都必须包含在一个或多个块容器中,例如pdivfieldsettable。其中,div是唯一中立的,对渲染没有默认影响:

<!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>this is the title of the web page</title>
</head>
<body>

<form action="formscript.php" method="post">
  <div>
    first name:<input type="text" name="firstname" />

    <input type="submit" />
  </div>
</form>

</body>
</html>