このXHTMLフォームが検証されないのはなぜですか?
-
05-07-2019 - |
質問
これがここで検証されない理由:
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>
解決
移動する必要があります
<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>
他のヒント
入力をfieldset
タグで囲んでみてください。 XHTMLのフォームのアイデアは、div、fieldsetなどではない直接の子孫を持たないことだと思います
誰かが言ったように:
[引用] バリデーターは、非表示の入力要素がフォームタグの直後に続くことはできないことを通知しています-何らかの種類のコンテナー要素が必要です。 [/ quote]
(ソース)
フィールドセットが役立つと思います。 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">
入力なし:(
私はまったく同じ問題を抱えていたため、理解するのに時間がかかりました。これは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>
動作しているようですが、過去にこれを行う必要はなかったと確信しています...うーん?
<!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を挿入します。
入力要素はフィールドセット内にある必要があります。これにより、非視覚的なユーザーエージェントがドキュメントにアクセスしやすくなるという利点が検証されます。
余談ですが、マークアップは少し 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>