Dynamické prvky ve formuláři

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
lukendo
Člen | 96
+
0
-

Ahoj, četl jsem tu všechny podobné příspěvky křížem krážem ale stále jsem nemohl najít řešení, jak při použití replikátoru ve FormFactory přesměrovávat na kotvu. Od této myšlenky jsem později ustoupil a snažím se přidávat prvky přes handle akci (což zase nevím jak se pořádně dělá a jestli to je best practices). Kdo se setkal s něčím podobným tak budu rád za jeho náměty na řešení. Děkuji

PetrHH
Člen | 49
+
0
-

Potřeboval jsem formulář, kde by si uživatel libovolně přidával a mazal pole. Zkusil jsem kde co a nakonec skončil u JavaScriptu. Prostě přidám položku, název pole bude vždy např. pocetKusu[]. Ty hranaté závorky jsou tam důležité. Data doluju pomocí

<?php
 $pocetKusu = $form->getHttpData($form::DATA_TEXT, 'pocetKusu[]');
?>

Zatím spokojenost :-).

Editoval PetrHH (21. 2. 2017 16:27)

akadlec
Člen | 1326
+
0
-

Záleží jaká pole chceš přidávat. Pokud chceš jen duplikovat pole/více polí, tak pak se ti k tomu hodí form replikátor kde si nadefinuješ která pole, resp. kontejner se má replikovat.
Pokud by to mělo být složitější tak pak to řešit přes JS a pak přistupovat k raw datům postu formuláře.

fizzy
Backer | 49
+
0
-

mne sa osvedcilo riesit zlozitejsie formulare v js pomocou https://vuejs.org – ziadne jquery klonovacie peklo, dobre sa to udrzuje a upravuje :)

johnnie
Člen | 54
+
0
-

ked to riesite sposobom ako pise @PetrHH , ako validujete tie prvky ? tam si musim napisat nejako zvlast valdiaciu pripadne netteForms.js ? ->setRequired(); asi fungovat nebude

lukendo
Člen | 96
+
0
-

PetrHH napsal(a):

Potřeboval jsem formulář, kde by si uživatel libovolně přidával a mazal pole. Zkusil jsem kde co a nakonec skončil u JavaScriptu. Prostě přidám položku, název pole bude vždy např. pocetKusu[]. Ty hranaté závorky jsou tam důležité. Data doluju pomocí

<?php
 $pocetKusu = $form->getHttpData($form::DATA_TEXT, 'pocetKusu[]');
?>

Zatím spokojenost :-).

Dostal jsem tomu že mám možnost zadat libovolný počet emailů, takže to řeším zmiňovaným způsobem. Nicméně je nutno ozančit jedno to pole za primární, tudíž si tam generuju (přes append funkci) i radio button se stejným jménem, a value mu dávám počet fieldů v containeru $(‚.container‘).length nicméně mi vrací pořád počet 1

Edit:
při nalejvání vodky, jsem na to přišel :D

var n = 1;
		$('#addMail').click(function(){
			n = n +1;
		    $('.mails').append('<div class="fields"><div class="twelve wide field"><label for="mails[]"></label><input type="text" name="mails[]" placeholder="e-mailová adresa"></div><div class="four wide field"><input type="radio" value='+ n +' name="primaryMails"></div></div>');
      	});

      	$('#removeMail').click(function(){
      		$('.mails').children().last().remove();
      		n = n - 1;
      	});

Editoval lukendo (3. 3. 2017 22:50)

PetrHH
Člen | 49
+
0
-

johnnie napsal(a):
ked to riesite sposobom ako pise @PetrHH , ako validujete tie prvky ? tam si musim napisat nejako zvlast valdiaciu pripadne netteForms.js ? ->setRequired(); asi fungovat nebude

Validaci si dělám ručně v javascriptu. Přidávám řádky faktury, takže se stejně musím starat o různé výpočty, dodělat validaci nebyl problém.