为什么这个XHTML表单不会验证?

时间:2008-10-31 12:24:25

标签: validation xhtml xhtml-1.0-strict

为什么这不会在此验证的任何想法:

http://validator.w3.org/#validate_by_input

表单输入标签似乎是错误的但是通过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">
 <head>
  <title>Test</title>
 </head>

 <body>
    <div class="Header">
        <table class="HeaderTable">
            <tr>
                <td>
                    <div class="Heading">Test <span class="Standard">Test</span>
                    </div>
                </td>
                <td>
                    <div class="Controls">
                        <form id="ControlForm" method="get" action="Edit.php">
                            <input type="submit" name="action" id="Edit" value="Edit" />
                            <input type="submit" name="action" id="New" value="New" />
                        </form>
                    </div>
                </td>
            </tr>
        </table>
    </div>
 </body>
</html>

6 个答案:

答案 0 :(得分:5)

尝试在输入周围添加fieldset标记。我认为XHTML中表单的概念是它们不能有直接的后代,而不是div,fieldset等。

答案 1 :(得分:3)

正如其他人所说:

【引用】 验证器告诉您隐藏的输入元素不能立即跟随表单标记 - 它需要具有某种容器元素。 [/报价]

Source

我猜一个字段集可以提供帮助;见The XHTML DTD

<!ELEMENT form %form.content;>

<!ENTITY % form.content "(%block; | %misc;)*">

<!ENTITY % misc "noscript | %misc.inline;">
<!ENTITY % misc.inline "ins | del | script">

<!ENTITY % block "p | %heading; | div | %lists; | %blocktext; | fieldset | table">

<!ENTITY % heading "h1|h2|h3|h4|h5|h6">
<!ENTITY % lists "ul | ol | dl">
<!ENTITY % blocktext "pre | hr | blockquote | address">

没有输入:(

答案 2 :(得分:3)

你需要移动

<div class="Controls">

这样 &lt; form 标记内


这很好地验证了

<!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">
<head>
    <title>Test</title>
</head>

<body>
    <div class="Header">
        <table class="HeaderTable">
        <tr>
            <td>
                <div class="Heading">Test <span class="Standard">Test</span></div>
            </td>
            <td>
                <form id="ControlForm" method="get" action="Edit.php">
                    <div class="Controls">
                        <input type="submit" name="action" id="Edit" value="Edit" />
                        <input type="submit" name="action" id="New" value="New" />
                    </div>
                </form>
            </td>
        </tr>
        </table>
    </div>
</body>
</html>

答案 3 :(得分:1)

我遇到了同样的问题,我花了一些时间才弄明白。这是w3c验证器最近的变化吗?这只是我确定我的一些页面的表单在过去已经过验证,但是现在他们似乎都遇到了同样问题的错误。

我以前经常这样做:

<div>
<form>
    <label></label>
    <input />
    <label></label>
    <input />
    <label></label>
    <input />
</form>

并获得验证错误,所以现在我只需在所有标签和输入周围添加fieldset或div以使其验证,如下所示:

<div>
<form>
    <fieldset>or<div>
        <label></label>
        <input />
        <label></label>
        <input />
        <label></label>
        <input />
    </fieldset>or</div>
</form>

似乎工作,但我确信我过去不必这样做......嗯?

答案 4 :(得分:0)

<!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">
 <head>
  <title>Test</title>
 </head>

 <body>
    <div class="Header">
        <table class="HeaderTable">
                <tr>
                        <td>
                                <div class="Heading">Test <span class="Standard">Test</span>
                                </div>
                        </td>
                        <td>

                            <form id="ControlForm" method="get" action="Edit.php">
                                <div class="Controls">
                                                <input type="submit" name="action" id="Edit" value="Edit" />
                                                <input type="submit" name="action" id="New" value="New" />
                                </div>
                            </form>

                        </td>
                </tr>
        </table>
    </div>
 </body>
</html>

将你的div放在你的表格中。

答案 5 :(得分:0)

您的输入元素应位于字段集中。这样可以验证并具有使非可视用户代理更容易访问文档的附加好处。

顺便说一下,你的标记有点受到 divitis 的影响。您可以直接在表格单元格上放置类,而不是在其中嵌套div元素(我不打算评论表格的使用情况)。此外,您可以直接设置表单元素的样式,而不是将其嵌套在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">
  <head>
    <title>Test</title>
  </head>
  <body>
    <div class="Header">
      <table class="HeaderTable">
        <tr>
          <td>
            <div class="Heading">Test <span class="Standard">Test</span></div>
          </td>
          <td>
            <div class="Controls">
              <form id="ControlForm" method="get" action="Edit.php">
                <fieldset>
                  <input type="submit" name="action" id="Edit" value="Edit" />
                  <input type="submit" name="action" id="New" value="New" />
                </fieldset>
              </form>
            </div>
          </td>
        </tr>
      </table>
    </div>
  </body>
</html>