Odesilani formulare s AJAX selecty
- zis
- Člen | 16
Zdravim,
myslim, ze se to tu uz nekolikrat resilo.
Mam formular a v nem nekolik ajaxem provazanejch select boxu (vyber z jednoho a podle toho vygeneruj data do druhyho, …). Po odeslani se mi objevi hlasky z validace, ze ostatni selectboxy (ktere neplnim pri staveni formulare) musim vyplnit. Co sem tak vycet z fora, tak de o to, ze se Nette brani podstrceni obsahu od 3tich stran. Jednoduse by hodnota selectboxu mela byt stejna, jako pri jeho inicializaci. Coz je pri ajaxovem generovani problem, kdyz nevim dopredu, jaky tam bude obsah.
Lze to nejak jednoduse a elegantne vyresit? Nerad bych soucasne reseni nejakym brutalnim zpusobem prepisoval. Zatim co me napadlo nejjednodussiho, je udelat pro kazdy dynamicky generovany selectbox hidden field, ktery budu javascriptem plnit danym id daneho selectboxu. Je to ale takovy „bastl“.
Co se tyka funkcnosti, vse mi funguje. Problem je s tim odeslanim celeho formulare. Odeslane hodnoty post z formulare sedi. Pouzivam posledni verzi Nette a PHP. Pripadne muzu nahodit nejaky kod, ale myslim ze de o princip.
Diky za kazdej napad
- h4kuna
- Backer | 740
Ahoj já jsem to vyřešil tak, že jsem si udělal další submit na kterém mám vypnutou validaci a csskem schované. Select reaguje na událost change a klikne na ono schované políčko. Kde jen upravím form a pošlu snippet zpátky.
Ukázka:
<?php
$el = $form->addSubmit('ajaxForm');
$el->setValidationScope(FALSE);
$el->gerControlPrototype()->style('display: none')->class('ajax');
$el->onClick[] = callback($this, 'dependencySelectbox');
?>
Editoval h4kuna (17. 6. 2013 8:32)
- bumprask
- Člen | 59
h4kuna:
Chápu tedy dobře po odeslání formuláře tlačítkem, které vynechá
validaci přidáš callback, kterému předáš objekt formuláře, prvkům
select pomocí setItems přiřadíš nové položky a zamezíš dalším
callbackům (onSuccess, onSubmit) v dalším zpracování.
Tento postup jsem učinil já a výsledkem sice bylo obnovení formuláře a přenačtení nových prvků, ovšem po odeslání takto změněného formuláře (přes skrytý submit) se mi pro daný znovunačtený select vrací prázdná hodnota…je tohle chování možné nebo mám někde chybu?
Můžeš zde prosím vystavit celý kód tvého řešení závislých selectů řešení?