Почему эта форма 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">
чтобы находился внутри тега < 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 и т. Д.
Как выразился кто - то другой:
[цитата] Валидатор сообщает вам, что ваш скрытый элемент ввода не может сразу следовать за тегом формы - у него должен быть какой-то элемент контейнера.[/цитата]
(Источник)
Я думаю, набор полей мог бы помочь;Видишь DTD в формате XHTML:
<!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>