Czy można zagnieżdżać takie formularze HTML?
<form name="mainForm">
<form name="subForm">
</form>
</form>
aby obie formy działały? Mój przyjaciel ma z tym problem, część subForm
prac, podczas gdy inna część tego nie ma.
html
nested-forms
Levi
źródło
źródło
Odpowiedzi:
Jednym słowem nie. Na stronie możesz mieć kilka formularzy, ale nie powinny być one zagnieżdżane.
Z wersji roboczej HTML5 :
źródło
Zetknąłem się z podobnym problemem i wiem, że nie jest to odpowiedź na pytanie, ale może pomóc komuś, kto ma tego rodzaju problem:
jeśli zachodzi potrzeba umieszczenia elementów dwóch lub więcej form w danej sekwencji , atrybut HTML5
<input> form
może być rozwiązaniem.From http://www.w3schools.com/tags/att_input_form.asp :
Scenariusz :
Realizacja :
Tutaj znajdziesz kompatybilność przeglądarki.
źródło
<input type="submit"
jest związana z jej<form>
, która określaaction
, że<input />
(y) związane z tym samym<form>
będzie używany w tym żądaniuDrugi formularz zostanie zignorowany, zobacz na przykład fragment kodu z WebKit:
źródło
Zwykły HTML nie pozwala na to. Ale dzięki javascript możesz to zrobić. Jeśli używasz javascript / jquery, możesz sklasyfikować elementy formularza za pomocą klasy, a następnie użyć serialize (), aby serializować tylko te elementy formularza dla podzbioru elementów, które chcesz przesłać.
Następnie w javascript możesz to zrobić, aby serializować elementy klasy1
Dla klasy 2 możesz to zrobić
Dla całej formy
lub po prostu
źródło
Jeśli używasz AngularJS, wszelkie
<form>
tagi wewnątrzng-app
są zastępowane w czasie wykonywaniangForm
dyrektywami, które są zaprojektowane do zagnieżdżania.źródło
Ponieważ jest rok 2019, chciałbym udzielić zaktualizowanej odpowiedzi na to pytanie. Możliwe jest osiągnięcie tego samego wyniku co formy zagnieżdżone, ale bez ich zagnieżdżania. HTML5 wprowadził atrybut formularza. Możesz dodać atrybut formularza do formantów formularza poza formularzem, aby połączyć je z określonym elementem formularza (według identyfikatora).
https://www.impressivewebs.com/html5-form-attribute/
W ten sposób możesz uporządkować swój HTML:
Atrybut formularza jest obsługiwany przez wszystkie nowoczesne przeglądarki. IE nie obsługuje tego, ale IE nie jest już przeglądarką, a raczej narzędziem kompatybilności, co potwierdza sam Microsoft: https://www.zdnet.com/article/microsoft-security-chief-ie-is-not-a -browser-so-stop-using-it-as-your-default / . Najwyższy czas, abyśmy przestali dbać o to, by działało w IE.
https://caniuse.com/#feat=form-attribute
https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#attr-fae-form
Ze specyfikacji HTML:
źródło
Innym sposobem na obejście tego problemu, jeśli używasz języka skryptowego po stronie serwera, który pozwala manipulować opublikowanymi danymi, jest zadeklarowanie formularza HTML w następujący sposób:
Jeśli wydrukujesz opublikowane dane (użyję tutaj PHP), otrzymasz tablicę podobną do tej:
Następnie możesz po prostu zrobić coś takiego:
Twój $ _POST ma teraz tylko dane „głównej postaci”, a dane podformularza są przechowywane w innej zmiennej, którą możesz dowolnie modyfikować.
Mam nadzieję że to pomoże!
źródło
Jak powiedział Craig, nie.
Ale jeśli chodzi o twój komentarz, dlaczego :
Łatwiej może być użyć 1
<form>
z danymi wejściowymi i przyciskiem „Aktualizuj”, a innego użyć ukrywania danych wejściowych za pomocą przycisku „Prześlij zamówienie”<form>
.źródło
http://www.w3.org/MarkUp/html3/forms.html
https://www.w3.org/TR/html4/appendix/changes.html#hA.3.9 (specyfikacja html4 nie odnotowuje zmian dotyczących zagnieżdżania formularzy od 3.2 do 4)
https://www.w3.org/TR/html4/appendix/changes.html#hA.1.1.12 (specyfikacja html4 nie odnotowuje zmian dotyczących formularzy zagnieżdżania z 4.0 do 4.1)
https://www.w3.org/TR/html5-diff/ (specyfikacja html5 nie zauważa zmian dotyczących formularzy zagnieżdżania od 4 do 5)
https://www.w3.org/TR/html5/forms.html#association-of-controls-and-forms komentarze do „Ta funkcja pozwala autorom obejść brak obsługi zagnieżdżonych elementów formularza”. nie cytuj, gdzie jest to określone, myślę, że zakładają, że powinniśmy założyć, że jest to określone w specyfikacji html3 :)
źródło
Prostym obejściem jest użycie iframe do przechowywania „zagnieżdżonej” formy. Forma jest zagnieżdżona, ale po stronie kodu znajduje się w osobnym pliku HTML.
źródło
Możesz także użyć formaction = "" wewnątrz tagu przycisku.
Byłoby to zagnieżdżone w oryginalnej formie jako osobny przycisk.
źródło
Nawet jeśli możesz sprawić, by działał w jednej przeglądarce, nie ma gwarancji, że będzie działał tak samo we wszystkich przeglądarkach. Więc chociaż możesz być w stanie sprawić, by działało przez jakiś czas, na pewno nie będziesz w stanie sprawić, aby działało przez cały czas.
źródło
Miałbyś nawet problemy z uruchomieniem go w różnych wersjach tej samej przeglądarki. Więc unikaj tego.
źródło
Chociaż nie przedstawiam rozwiązania dla zagnieżdżonych formularzy (nie działa niezawodnie), przedstawiam obejście, które działa dla mnie:
Scenariusz użycia: superforma pozwalająca na zmianę N przedmiotów jednocześnie. Na dole znajduje się przycisk „Prześlij wszystko”. Każdy element chce mieć własną formę zagnieżdżoną z przyciskiem „Prześlij element nr N”. Ale nie mogę ...
W tym przypadku można rzeczywiście korzystać z jednego formularza, a następnie mieć nazwę przyciski być
submit_1
..submit_N
isubmitAll
i obsługiwać go po stronie serwerów, przez tylko patrząc na params kończących się_1
jeśli nazwa przycisku byłosubmit_1
.Ok, to niewiele z wynalazku, ale spełnia swoje zadanie.
źródło
O zagnieżdżaniu form: spędziłem 10 lat jednego popołudnia próbując debugować skrypt ajax.
przepraszam, moja poprzednia odpowiedź / przykład nie uwzględniała znaczników HTML.
form_2 ciągle nie powiodło się, mówiąc niepoprawny form_2.
Kiedy przeniosłem ajaxContainer, który wytworzył formularz_2
<i>outside</i>
formularza_1, wróciłem do pracy. To odpowiedź na pytanie, dlaczego można zagnieżdżać formy. Mam na myśli naprawdę, do czego służy identyfikator, jeśli nie definiuje, który formularz ma być użyty? Musi być lepsza, bardziej płynna praca.źródło
Użyj pustego znacznika formularza przed zagnieżdżonym formularzem
Testowane i działające na Firefox, Chrome
Nie testowano w IE
źródło
Chociaż pytanie jest dość stare i zgadzam się z @everyone, że zagnieżdżanie formy jest niedozwolone w HTML
Ale to coś wszyscy mogą chcieć to zobaczyć
gdzie możesz włamać się (nazywam to włamaniem, ponieważ jestem pewien, że to nie jest uzasadnione) HTML, aby umożliwić przeglądarce zagnieżdżenie formularza
JS FIDDLE LINK
http://jsfiddle.net/nzkEw/10/
źródło
Nie, nie możesz mieć zagnieżdżonej formy. Zamiast tego możesz otworzyć Modal, który zawiera formularz i wykonać przesłanie formularza Ajax.
źródło
Naprawdę niemożliwe ... Nie mogłem zagnieździć znaczników formularzy ... Jednak użyłem tego kodu:
z
{% csrf_token %}
i takie tami zastosowałem trochę JS
źródło
Dzisiaj również utknąłem w tym samym problemie. Rozwiązałem problem, dodałem kontrolę użytkownika i
na tej kontroli używam tego kodu
i na zdarzeniu PreRenderComplete strony wywołaj tę metodę
Wierzę, że to pomoże.
źródło
Zanim się zorientowałem, że nie powinienem tego robić, zagnieżdżałem formularze w celu posiadania wielu przycisków przesyłania. Trwało to przez 18 miesięcy, tysiące transakcji rejestracji, nikt nie dzwonił do nas o żadnych trudnościach.
Zagnieżdżone formularze dały mi identyfikator do przeanalizowania pod kątem prawidłowego działania. Nie złamałem się, dopóki nie próbowałem dołączyć pola do jednego z przycisków i Validate narzekał. Rozplątanie go nie było wielkim problemem - użyłem jawnego strify na zewnętrznym formularzu, więc nie miało znaczenia, że przesłanie i formularz nie pasują. Tak, tak, powinienem wziąć guziki z poddania się po kliknięciu.
Chodzi o to, że są okoliczności, w których nie jest całkowicie zepsuty. Ale „nie do końca uszkodzony” jest być może zbyt niskim standardem, aby strzelać do :-)
źródło