Хорошо ли <input> сформирован без <form>?

225

Допустимо ли иметь <input>без этого в <form>?

Иметь процесс для разметки некоторых полей на страницах и просто найти страницу с полями ввода, которые не были отмечены, как я ожидал.
Это заняло у меня некоторое время, но я понял, что процесс получения элементов формы и получения полей - это то, что заставило их пропустить, потому что формы нет.

Грег Домян
источник
@ Адриано - моя мысль точно. просто запустите его и посмотрите!
Габриэль Херли
1
Конечно, валидатор w3c , я действительно должен был добавить объяснение, почему было бы неплохо.
Грег Домжан
Я имею в виду также, что он может быть действительным для некоторых версий html, но не для других, и в этом случае валидатор намного быстрее, чем просматривает стандарты.
Адриано Вароли Пьяцца

Ответы:

200

<input>без <form> действительного , да (по крайней мере для HTML 4.01, посмотрите ближе к концу 17.2.1):

Элементы, используемые для создания элементов управления, обычно появляются внутри элемента FORM, но могут также появляться за пределами объявления элемента FORM, когда они используются для создания пользовательских интерфейсов. Это обсуждается в разделе о внутренних событиях. Обратите внимание, что элементы управления вне формы не могут быть успешными элементами управления.

ChristopheD
источник
7
Чтобы можно было отправлять данные формы на сервер (кроме Ajax).
Людовик Куты
5
@PhilipSmith Я знаю, что ваш комментарий был написан давно . Но почему вы думаете, что это странно или бессмысленно? Зачем мне создавать форму, если элемент управления не взаимодействует с сервером?
Адам-Бек
18
Что такое «успешный контроль»?
АликЭльзин-килака
22
Когда форма отправляется на обработку, некоторые элементы управления получают имя в паре с текущим значением, и эти пары передаются вместе с формой. Те элементы управления, для которых представлены пары имя / значение, называются успешными элементами управления. w3c
SantiBailors
3
@ adam-beck Например, определенный веб-сайт AngularJS обрабатывает ввод, обрабатывает данные и отправляет их в API. Шаблоны HTML для форм могут быть написаны без каких-либо тегов форм, и они прекрасно взаимодействуют с сервером.
sr9yar
75

Я проверил следующее с помощью валидатора W3C, и он подтверждает, что это действительно.

<!DOCTYPE html>
<html>
<head>
  <title>test</title>
</head>
<body>
  <input type='text' />
</body>
</html>
Вай Ип Тунг
источник
6

Ссылка на более актуальную спецификацию:

HTML 5.2 - Рекомендация W3C (14 декабря 2017 г.)

Элемент, связанный с формой, может иметь связь с <form>элементом, который называется владельцем формы элемента. Если элемент, связанный с формой, не связан с <form>элементом, его владелец формы считается нулевым.

Дэвид
источник
4

Согласно МДН возможно:

Обратите внимание, что всегда можно использовать виджет формы вне элемента, но если вы это сделаете, этот виджет формы не имеет никакого отношения к какой-либо форме. Такие виджеты можно использовать вне формы, но тогда у вас должен быть специальный план для таких виджетов, поскольку они ничего не будут делать самостоятельно. Вам придется настроить их поведение с помощью JavaScript.

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

Аднан Фарадхи
источник
2

Я знаю, что этот вопрос довольно старый, однако я успешно построил много сложных страниц ввода данных без тегов формы. Хотя это не считается "стандартным" для многих, НЕЛЬЗЯ использовать входы без<form> . Мои проекты были случаями, когда мне требовался полный контроль над тем, как ведет себя страница и что мешает поведению по умолчанию. Был в состоянии выполнить проверку на уровне страницы и поля (используя JS) и «отправил» данные с помощью вызовов Ajax и т. Д. На самом деле, это мой предпочтительный способ в эти дни.

Требуется много JS, но это не так сложно и легко сделать как код многократного использования.

Есть также другие случаи, когда я не использую формы с входными данными, такие как страницы входа.

Надеюсь, что этот отзыв кому-то поможет.

G-Man
источник
1

Да, вы можете иметь действительный ввод без формы.

Гейзенберга
источник
14
Ну, вы могли бы добавить некоторые доказательства за «да». Или уточнение, для каких версий HTML это верно. Тем не менее, я бы не унижал тебя.
Адриано Вароли Пьяцца
9
Итак, с вашим обоснованием, зачем вообще иметь SO, если пользователь может просто зайти на W3 и посмотреть сам? Я бы тоже не проголосовал против вас, но я должен согласиться, что тот, у кого больше объяснений в ясной и лаконичной форме, получит одобрение, потому что объяснение, а также правильный ответ - это то, что наиболее полезно здесь, в SO.
Mattygabe
-10

Конечно, используйте

document.getElementById('your_input_id').validity.valid

проверять действительность поля динамически.

таран
источник
31
Это не имеет ничего общего с достоверностью разметки, а только для API проверки ограничений . Как этот ответ получил 8 голосов, мне не под силу.
user247702