Autor Zpráva
joe
Profil
Ahoj, mam jednoduchou otázku, jak nejlépe udělat přidávání dynamických polí do formuláře, pokud mám např. tento formulář:

<form>
<div class="person">
<input name="name[1]" type="text">
<input name="surname[1]" type="text">
</div>
</form>

<button onclick="addPerson()">Přidat osobu</button>

chci umožnit duplikovat a odstraňovat osoby, můžu:

1. Naklonovat poslední div.person a vložit ho pod něj, jak ale vyřešit názvy inputů, aby nedocházelo k možným kolizím?
2. Místo jmen name[1] použít jem name[], ale problém vzniká, pokud ten samý formulář chci použít pro editaci, nebudu mít možnost rozeznat, které položky k čemu patří.
3. Použít šablonovací systém v JS, tím mi ale vznikají šablony dvě - jedna pro klasický výpis (generovaná) a druhá pro JavaScript - a to není moc dobře udržovatelné. Možná je řešení, o kterém nevím (?)

Zkrátka co byste poradili :-) Díky
mimiru
Profil *
joe:
2. Místo jmen name[1] použít jem name[], ale problém vzniká, pokud ten samý formulář chci použít pro editaci, nebudu mít možnost rozeznat, které položky k čemu patří.

při ukládání prostě smažeš (a vytvoříš) / přepíšeš všechny záznamy.

3. Použít šablonovací systém v JS, tím mi ale vznikají šablony dvě - jedna pro klasický výpis (generovaná) a druhá pro JavaScript
pokud aplikace nemusí být funkční bez js tak je řešením i první formulář vytvořit pomocí js. pak máš jen js šablonu.
Kajman
Profil
joe:
2.

Do hidden inputu lze dát původní klíč. Jen by se po kopírování musela hodnota skrytého vstupu smazat.
joe
Profil
Kajman:
Už jsem kolikrát slyšel, že návzy v HTML pro pole by měla vždycky obsahovat nějaké indexy, takže name[1], name[2], bez nich by to prý být nemělo, ještě jsem nepřišel na to proč.

Do hidden inputu lze dát původní klíč.
Dá se to, ale při další manipulaci s prvky DOMu se může stát, že se zapomenou hidden inputy přesunout, chyba se ukazovat nikde nebude a výstupem budou jiné hodnoty pro jiný index.

mimiru:
pokud aplikace nemusí být funkční bez js
... to by měla být, pokud se bavíme čistě o stránkách a ne webových aplikací, bylo by dobré, kdyby se přinejmenším jedna ta osoba (podle příkladu) zobrazila, takže tady by mi šablonovací systém akorát ztěžoval práci.

prostě smažeš (a vytvoříš)
To se mi zdá zbytečné, proč bych měl něco, co už existuje mazat a vytvářet to znovu, jen proto, že změním nějakou hodnotu.
Str4wberry
Profil
Reakce na joa:
Už jsem kolikrát slyšel, že návzy v HTML pro pole by měla vždycky obsahovat nějaké indexy, takže name[1], name[2], bez nich by to prý být nemělo, ještě jsem nepřišel na to proč.
To se mi moc nezdá. Z pohledu HTML to žádné pole a indexy nejsou.

nebudu mít možnost rozeznat, které položky k čemu patří
Položky se vypisují dle nějakého pořadí, podle stejného pořadí by je mohlo jít dát dohromady.

při další manipulaci s prvky DOMu se může stát, že se zapomenou hidden inputy přesunout
Jak to myslíš? Pokud to napíšeš dobře, tak se snad sami od sebe zapomenout nemohou, ne?

Moc nerozumím, kde máš problém. Nebo mi něco uniká. Šablona (část) bude:
<div class="person">
  <input name="name[<% ID %>]" value="<% name %>" type="text">
  <input name="surname[<% ID %>]" value="<% surname %>" type="text">
</div>

1) Bude-li se šablona používat pro editaci, vypíší se na místě <% proměnných %> příslušně hodnoty.
2) Bude-li se šablona používat pro vložení záznamu, nevypíše se na příslušných místech nic.
joe
Profil
Str4wberry:
Položky se vypisují dle nějakého pořadí, podle stejného pořadí by je mohlo jít dát dohromady.

Pokud bude možnost položky odebírat, tak pokud se vypíšou tři položky a prostřední odeberu, byl by problém - položky by se odeslaly v jiném pořadí, než ve kterém přišly

Jak to myslíš? Pokud to napíšeš dobře, tak se snad sami od sebe zapomenout nemohou, ne?
To máš pravdu :-) ale hledám nějaké komplexní řešení, osobně problém nemám. K takto očíslovaným názvům se mi zdá, že je daleko lepší přístup (snadnější) na serveru.

Šablona (část) bude:
Sám jsem z toho zmatenej :-) nevím jestli to je to, co jsi mi radil, ale došla mi jednoduchá a geniální myšlenka - poslední osoba bude vždy s nevyplněnýma hodnotama a to bude právě ta, která se duplikuje a nejlepší je to, že to bude fungovat i v případě vypnutého JS.

Problém ovšem je s frameworky (Nette), které mi takovou strukturu asi nepovolí.

Bude-li se šablona používat pro editaci
Třeba a já bych i u editace chtěl mít tlačítko "Přidat další osobu", jak bych se pak zbavil těch čísel v hranatých závorkách?

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: