Почему входной тег не разрешен непосредственно внутри тега формы? - PullRequest
9 голосов
/ 26 марта 2011

Я только что прочитал следующее на http://w3fools.com/#html_forms:

Элементы неблокированного уровня (такие как <input>) недопустимы непосредственно внутри тегов <form> до HTML5.

Я никогда не слышал ничего подобного, и каждое основное учебное пособие по HTML, которое я видел, кажется вполне подходящим для размещения тегов ввода непосредственно внутри тега формы. Итак, мой вопрос состоит из трех частей:

  • Является ли приведенное выше утверждение законным?
  • Почему это так? (Было ли это просто упущением, или создатели спецификации HTML пытались предотвратить конкретные проблемы, создавая это правило?)
  • Каков рекомендуемый способ создания формы с входными данными? (Должны ли мы просто создать div или таблицу непосредственно внутри тега формы?)

Ответы [ 4 ]

9 голосов
/ 26 марта 2011

Это стандарты педантичности.

  • Это утверждение является допустимым для стандарта: в HTML 4.01 определение для <form> указывает, что оно может содержать только блочные элементы или <script>. Насколько позволяет каждый браузер в мире, это нормально.
  • Я могу только догадываться, что они считают <form> вовсе не тегом макета и хотят, чтобы все встроенные элементы содержались внутри элемента блока.
  • Да, вы должны поместить <div>, <table>, <p> или какой-либо другой элемент представления блока внутри <form>.
5 голосов
/ 26 марта 2011

Вышеприведенное утверждение верно. В HTML тег не является допустимым элементом тега . Чтобы это подтвердить, вам нужно заключить тег в

или
. Что показано ниже.
<form action="/" method="post">
    <fieldset>
        Field: <input type="text" name="field" />
        <br />
        <input type="submit" value="Submit" />
    </fieldset>
</form>
1 голос
/ 26 марта 2011

Прежде всего, я хотел бы отметить, что не удивительно, что учебники HTML учат вас делать что-то не так - HTML был практически разработан, чтобы принимать любые способы. Вы можете оставить теги незакрытыми, вкладывать их ненадлежащим образом и так далее, что является одной из причин, по которым я лично использую XHTML.

Это утверждение похоже на правду, но из-за того, как устроен HTML, на практике это не имеет значения. XHTML, вероятно, запрещает это.

Форма на самом деле не является контейнером любого вида. Кажется, создатели спецификации HTML любили такие вещи, как элементы уровня блока, в которые вы должны обернуть все, что угодно. Это только мой взгляд на это, но, насколько я заметил, элементы не блочного уровня не должны использоваться без подходящего контейнера для них. Точно так же, как вы не должны помещать элементы не блочного уровня в <blockquote>. Элементы уровня блока являются контейнерами для других элементов.

Див, таблица - я думаю, что даже <p> делает здесь вещь.

0 голосов
/ 26 марта 2011

Что ж, согласно спецификации HTML 4.01 (в частности, раздел 17.3 ), это технически верно. Однако я не знаю ни одного веб-браузера, который мог бы вызвать у вас проблему из-за него.

...