Czy poprawny HTML zawiera następujące elementy:
<form action="a">
<input.../>
<form action="b">
<input.../>
<input.../>
<input.../>
</form>
<input.../>
</form>
Więc kiedy podasz „b”, otrzymujesz tylko pola w wewnętrznej formie. Gdy prześlesz „a”, otrzymasz wszystkie pola minus te w „b”.
Jeśli nie jest to możliwe, jakie obejścia tej sytuacji są dostępne?
html
web-standards
standards-compliance
cały kod
źródło
źródło
Odpowiedzi:
A. To nie jest poprawny HTML ani XHTML
W oficjalnej specyfikacji W3C XHTML sekcja B. „Zakazy elementów” stanowi, że:
http://www.w3.org/TR/xhtml1/#prohibitions
Jeśli chodzi o starszą specyfikację HTML 3.2 , sekcja dotycząca elementu FORMS stwierdza, że:
B. Obejście
Istnieją obejścia używania JavaScript bez konieczności zagnieżdżania znaczników formularzy.
„Jak utworzyć zagnieżdżony formularz”. (pomimo tytułu nie jest to zagnieżdżony znacznik formularza, ale obejście JavaScript).
Odpowiedzi na to pytanie StackOverflow
Uwaga: Chociaż można oszukać W3C Validators, aby przekazać stronę, manipulując DOM za pomocą skryptów, nadal nie jest to legalny HTML. Problem z użyciem takich podejść polega na tym, że zachowanie Twojego kodu nie jest teraz gwarantowane w różnych przeglądarkach. (ponieważ nie jest to standard)
źródło
Jeśli ktoś znajdzie ten post tutaj, to świetne rozwiązanie bez potrzeby JS. Użyj dwóch przycisków przesyłania z różnymi atrybutami nazwy w języku serwera, który przycisk został naciśnięty, ponieważ tylko jeden z nich zostanie wysłany na serwer.
Po stronie serwera może wyglądać mniej więcej tak, jeśli używasz php:
źródło
HTML 4.xi HTML5 nie zezwalają na zagnieżdżone formularze, ale HTML5 pozwoli na obejście z atrybutem „forma” („właściciel formularza”).
W przypadku HTML 4.x możesz:
źródło
Jak powiedzieli inni, nie jest to prawidłowy HTML.
Wygląda na to, że robisz to, aby wizualnie pozycjonować formularze. Jeśli tak jest, po prostu wykonaj dwa osobne formularze i użyj CSS, aby je ustawić.
źródło
Nie, specyfikacja HTML stwierdza, że żaden
FORM
element nie powinien zawierać innegoFORM
elementu.źródło
Możesz bardzo łatwo odpowiedzieć na swoje pytanie, wprowadzając kod HTML w W3 Validator . (Zawiera pole wprowadzania tekstu, nie musisz nawet umieszczać kodu na serwerze ...)
(I nie, to się nie potwierdzi.)
źródło
raczej użyj niestandardowej metody javascript w atrybucie akcji formularza!
na przykład
źródło
Istnieje możliwość umieszczenia elementu iframe wewnątrz formy zewnętrznej. Ramka iframe zawiera formę wewnętrzną. Pamiętaj, aby użyć
<base target="_parent" />
tagu wewnątrz tagu head iframe, aby formularz zachowywał się jako część strony głównej.źródło
nie, patrz w3c
źródło
Nie, to nie jest poprawne. Ale „rozwiązaniem” może być utworzenie okna modalnego poza formą „a” zawierającą formę „b”.
Można to łatwo zrobić, jeśli używasz bootstrapu lub zmaterializujesz css. Robię to, aby uniknąć używania iframe.
źródło
Obejście inne niż JavaScript dotyczące zagnieżdżania znaczników formularzy:
Ponieważ na to pozwalasz
podczas przesyłania „a” działałyby następujące elementy, przy użyciu zwykłych formularzy internetowych bez wymyślnych sztuczek JavaScript:
Krok 1. Umieść każdy formularz na własnej stronie internetowej.
Krok 2. Wstaw ramkę iframe wszędzie tam, gdzie ma się pojawiać ten podformularz.
Krok 3. Zysk.
Próbowałem użyć witryny z placem zabaw dla kodu, aby pokazać wersję demonstracyjną, ale wiele z nich zabrania osadzania swoich stron w ramkach iframe, nawet w obrębie własnej domeny.
źródło
Jeśli potrzebujesz formularza do przesłania / zatwierdzenia danych do relacyjnej bazy danych 1: M, zaleciłbym utworzenie wyzwalacza DB „po wstawieniu” w tabeli A, który wstawi dane niezbędne do tabeli B.
źródło
Nie, to nie jest poprawne, ale możesz oszukać swoją wewnętrzną pozycję formularza
HTML
przy pomocyCSS
ijQuery
użyciu. Najpierw utwórz div div kontenera w formularzu nadrzędnym, a następnie w dowolnym innym miejscu strony div z formularzem dziecka (wewnętrznym):…
Daj kontenerowi div stabilną heaght
Dzięki trickowi pozycja „other_form” względem div kontenera.
PS: Będziesz musiał grać liczbami, aby wyglądało ładnie.
źródło