JS validácia manuálne pridaného prvku

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

Zdravím,
vie mi prosím vás niekto povedať ako zvalidujem pomocou live-form-validation.js input, ktorý pridávam do formuláru ručne? Myslel som, že bude stačiť pridať data-nette-rules. Mám takýto input:

<input name="products[]" id="frm-claimForm-produsts" type="text" class="form-control" required data-nette-rules='[{"op":":filled","msg":"Názov je povinná položka."}]'>

Po načítaní to vyzerá, že live-form-validation ho zaregistrovala, ale errory nepridáva. Po načítaní vyzerá takto:

<div class="col-xs-7 col-sm-10 lfv-error-parent">
	<div class="input-group">
		<input name="products[]" id="frm-claimForm-produsts" type="text" class="form-control" required="" data-nette-rules='[{ "op":":filled","msg":"Názov je povinná položka." }]' data-lfv-initialized="true" data-lfv-message-id="frm-claimForm-produsts_message">
		<span class="input-group-btn">
			<span class="btn btn-primary js-add-new">+</span>
		</span>
	</div>
	<span id="frm-claimForm-produsts_message"></span>
</div>

Nevidí tam niekto nejakú chybu?

Editoval Čamo (20. 10. 2016 13:52)

Čamo
Člen | 798
+
0
-

No takže problém je v hranatých zátvorkách name=„products[]“. Nejaké nápady?

CZechBoY
Člen | 3608
+
0
-

V čem přesně je problém se závorkama? Jméno jako jméno…

Čamo
Člen | 798
+
0
-

Neviem, aj mne to prišlo tak, ale keď ich odstránim tak to funguje. Len teraz mám iný problém ako spracovať dynamicky javascriptom vytvorené inputy…

Čamo
Člen | 798
+
0
-

No to chápem, ale ako cez tie vygenerované polia preiterujem? Keď mali name xz[] tak to nebol problém.

Editoval Čamo (20. 10. 2016 22:33)

Jan Mikeš
Člen | 771
+
0
-

Doporučuji je obalit do containeru a iterovat nad containerem, pak už by to mělo být jednoduché přes

foreach ($containerValues as $key => $val) { ... }
Čamo
Člen | 798
+
0
-

Ale nebude Nette kontrolovať či sú v kontainery povolené prvky? To by znamenalo, že tie čo budú navyšše vyhodí. Ale neviem. Urobil som to tak, že len prvý input je povinný a ten má validné name. Ďalšie sú už nepovinné a majú majú name[] so zátvorkami takže ich dostanem ako pole.

On ten projekt je na Nette 5.2 a ani framework nepovolí vytvoriť textové pole so zátvorkami v name.

Editoval Čamo (21. 10. 2016 11:41)

duke
Člen | 650
+
0
-

Můžeš použít 2 vnořené Containery např. „products“ a číselné, tj. něco jako:

$productsContainer = $form->addContainer('products');
foreach ($products as $product) {
	$productContainer = $productsContainer->addContainer($product->Rank);
	$productContainer->addText("title", "Název")
		->addRule(...); // TODO
}

To ti pak bude generovat inputy pojmenované jako: products[1][title], product[2][title], atp.

Čamo
Člen | 798
+
0
-

Tie vnorené kontainery vyzerajú strašlivo…

JS validácia by mala byť fixnutá viď: https://github.com/…on/issues/26#…