Dynamické pridávanie prvkov AJAX requestu do formulára
- Aris
- Člen | 48
Ahojte, nejaká best practice ako je najvhodnejšie pridávať dynamicky prvky formulára? Mám 2 formuláre, do jedného pridávam prvky dynamicky AJAX-om, druhý je statický rozšírený o multiplier(ne-AJAX). Praktickejšie bude mať na stránke iba jeden formulár s odoslaním, zároveň sa ajaxovo pridané prvky uložia. Ako na to?
Pri spojení klasického formulára a dynamicky vytvoreného (replikovaním AJAX snippetov) sa nedostanem po odoslaní k hodnotám dynamických prvkov…
{form testForm}
{input publish_time}
//klasicke inputy
...
//neajaxovy multiplier
<div n:multiplier="multiplier" class="m-b-10 col-md-12">
<input n:name="krok" class="form-control d-inline-block" placeholder="Postup">
{btnRemove}
</div>
<span>
{btnCreate multiplier}
{btnCreate $form[multiplier]:5}
</span>
//pridanie dynamicky vytvorenych prvkov
<div class="list-group" n:snippet="selectedVal" data-ajax-append="true">
<div class=" list-group-item list-group-item-action flex-column align-items-start " >
<input name="sel[]" class="form-control d-inline-block" placeholder="Poznámka" value="">
...
</div>
</div>
{/form}
public function testFormSucceeded(Nette\Application\UI\Form $form )
{
//vytiahnutie values z dynamickeho formulara (po spojeni nefunguje)
$values = $form->getHttpData($form::DATA_TEXT | $form::DATA_KEYS, 'sel[]');
//vytiahnutie values z klasickeho formulara (po spojeni obsahuje iba hodnoty nedynamickej casti)
$values = $form->values();
}
Hral som sa i s webchemistry/forms-multiplier. Tam by sa dal použiť 2× multiplier a oba zajaxovať. Ak je toto riešenie prípustnejšie, ako naviazať AJAX-handle vyvolaný $.ajax.nette pri výbere suggestion-u na dynamickú zmenu polí formulára a následný redraw?
$copies_2=1;
$maxCopies_2=10;
$multiplier_2= $form->addMultiplier('testMultiplier',
function (Nette\Forms\Container $container, Nette\Forms\Form $form)
{
$container->addText('skusobnyInput');
}, $copies_2, $maxCopies_2);
$multiplier_2->addRemoveButton('x')
->addClass('ajax btn btn-danger pull-right m-t-5');
$multiplier_2->addCreateButton('Pridať')
->addClass('btn btn-primary pull-right m-r-15');
Ďakujem :) .
Editoval Aris (24. 11. 2018 14:35)