Czy <input> jest dobrze uformowane bez <form>?

225

Czy to jest ważne <input> to bez bycia w <form>?

Przeprowadź proces oznaczania niektórych pól na stronach i właśnie znalazłem stronę z polami wejściowymi, które nie zostały oznaczone zgodnie z oczekiwaniami.
Zajęło mi to trochę czasu, ale zorientowałem się, że proces pobierania elementów formularza, a następnie uzyskiwania pól, spowodował ich pominięcie, ponieważ nie ma formularza.

Greg Domjan
źródło
@Adriano - dokładnie tak myślałem. po prostu uruchom i zobacz!
Gabriel Hurley,
1
Pewny walidator w3c , naprawdę powinienem był dodać wyjaśnienie, dlaczego byłoby miło.
Greg Domjan
Mam na myśli również to, że może być poprawny dla niektórych wersji HTML, ale nie dla innych, i w takim przypadku walidator jest znacznie szybszy niż sprawdzanie standardów.
Adriano Varoli Piazza

Odpowiedzi:

200

<input>bez <form> znaku wydaje się poprawny , tak (przynajmniej dla HTML 4.01, spójrz pod koniec 17.2.1):

Elementy używane do tworzenia formantów zwykle pojawiają się w elemencie FORM, ale mogą także pojawiać się poza deklaracją elementu FORM, gdy są używane do budowania interfejsów użytkownika. Jest to omówione w części dotyczącej zdarzeń wewnętrznych. Pamiętaj, że formanty poza formularzem nie mogą być formantami pomyślnymi.

ChristopheD
źródło
7
Aby móc przesłać dane formularza na serwer (Ajax na bok).
Ludovic Kuty,
5
@ PhilipSmith Wiem, że twój komentarz został napisany dawno temu. Ale dlaczego uważasz, że jest to dziwne lub bezcelowe? Dlaczego miałbym chcieć utworzyć formularz, jeśli formant nie komunikuje się z serwerem?
adam-beck
18
Co to jest „skuteczna kontrola”?
AlikElzin-kilaka
22
Po przesłaniu formularza do przetworzenia niektóre kontrolki mają sparowane nazwy z bieżącą wartością, a te pary są przesyłane z formularzem. Te elementy sterujące, dla których przesyłane są pary nazwa / wartość, nazywane są elementami sterującymi zakończonymi powodzeniem. w3c
SantiBailors
3
@ adam-beck Na przykład pewna strona internetowa AngularJS obsługuje dane wejściowe, manipuluje danymi i wysyła je do interfejsu API. Szablony HTML formularzy mogą być pisane bez żadnych znaczników formularzy i dobrze komunikują się z serwerem.
sr9yar
75

Sprawdziłem następujące za pomocą walidatora W3C i potwierdza, że ​​jest to poprawne.

<!DOCTYPE html>
<html>
<head>
  <title>test</title>
</head>
<body>
  <input type='text' />
</body>
</html>
Wai Yip Tung
źródło
6

Odniesienie do bardziej aktualnej specyfikacji:

HTML 5.2 - zalecenie W3C (14 grudnia 2017 r.)

Element powiązany z formularzem może mieć związek z <form>elementem, który jest nazywany właścicielem formularza elementu. Jeśli element powiązany z formularzem nie jest powiązany z <form>elementem, jego właściciel formularza ma wartość null.

David
źródło
4

Według MDN możliwe jest:

Zauważ, że zawsze można używać widgetu formularza poza elementem, ale jeśli to zrobisz, ten widget formularza nie ma nic wspólnego z żadną formą. Takie widżety mogą być używane poza formularzem, ale powinieneś mieć specjalny plan dla takich widżetów, ponieważ same nie zrobią nic. Będziesz musiał dostosować ich zachowanie za pomocą JavaScript.

HTML5 wprowadza atrybut formularza do elementów formularza HTML. Powinno to umożliwiać jawne powiązanie elementu z formularzem, nawet jeśli nie jest on zawarty w znaczniku formularza. Niestety, na razie wdrożenie tej funkcji w przeglądarkach nie jest jeszcze wystarczająco dobre, aby na niej polegać.

Adnan Faradhi
źródło
2

Wiem, że to pytanie jest dość stare, jednak udało mi się zbudować wiele złożonych stron wprowadzania danych bez znaczników formularza. Chociaż przez wielu nie jest uważany za „standardowy”, NIE jest niewłaściwe używanie danych wejściowych bez znaku <form>. Moje projekty były sytuacjami, w których potrzebowałem pełnej kontroli nad zachowaniem strony i przeszkadzało jej domyślne zachowanie formularza. Był w stanie przeprowadzić walidację na poziomie strony i pola (przy użyciu JS) i „przesłać” dane za pomocą wywołań Ajax itp. W rzeczywistości jest to obecnie mój preferowany sposób.

Wymagana jest duża ilość JS, ale nie jest to trudne i można go łatwo zrobić jako kod wielokrotnego użytku.

Istnieją również inne przypadki, w których zdecydowanie NIE używam formularzy z danymi wejściowymi, takimi jak strony logowania.

Mam nadzieję, że to świadectwo pomoże komuś.

G-Man
źródło
1

Tak, możesz mieć prawidłowe dane wejściowe bez formularza.

heisenberg
źródło
14
Cóż, mógłbyś dodać dowody potwierdzające „tak”. Lub wyjaśnienie, dla których wersji HTML jest to prawdą. Nadal bym cię nie zmęczyła.
Adriano Varoli Piazza
9
Więc z twojego uzasadnienia, dlaczego w ogóle masz SO, jeśli użytkownik może po prostu przejść do W3 i sam to sprawdzić? Ja też nie głosowałbym za tobą, ale musiałbym się zgodzić, że ten, kto ma więcej wyjaśnień w sposób jasny i zwięzły, otrzymuje opinię pozytywną, ponieważ wyjaśnienie, jak również poprawna odpowiedź, jest najbardziej pomocne w SO.
Mattygabe,
-10

Jasne, użyj

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

dynamicznie sprawdzać poprawność pola.

taran
źródło
31
To nie ma nic wspólnego z ważnością znaczników, zamiast tego dotyczy API sprawdzania poprawności ograniczeń . Jak ta odpowiedź uzyskała 8 głosów pozytywnych, jest poza mną.
user247702 20.04.2016