Form + AJAX – problém s onSubmit
- Flipajs
- Člen | 29
Ahoj. Možná mě ukamenujete, protože už se to třebas někde řešilo. Včera jsem strávil snad 5 hodin procházením fór a zkoušení různých možností, ale ne a ne s tím hnout.
Jde o tohle:
...
$form->addSubmit('continue', 'Pokračovat');
$form->onSubmit[] = array($this, 'CreateComponentCompetitionAddQuestionForm_onSubmit');
...
if($round['questionType'] == 'textAnswer')
{
$form->addTextArea('question', 'otázka:');
$form->addText('textAnswer', 'správná odpověď');
$form->removeComponent($form['continue']);
$form->addSubmit('continue', 'Odeslat');
}
Celý form je obsluhován přes AJAX. V okamžiku kdy tedy kliknu na Pokračovat a v slectboxu mám questionType == ‚textAnswer‘ viz podmínka tak se vše provede jak má. Přidá se textare, input odstraní starý button a přidá nový. Ale takto nově vytvořený form již nemůžu odeslat.
Je možné že pomocí removeComponent odstraním nějako akci onSubmit?
PS: volám vždy stejnou fci, kde jsou podmínky podle kterých se upraví form
či uloží atd.
Možná je celé mé řešení špatně. Možná bych ani nepotřeboval AJAX, jenom chci nějako jednoduše bez ztráty dat upravit form a pak případně odeslat. (V určitém případě je potřeba form upravit 2* po sobě a teprve pak až odeslat).
Předem díky za jakoukoliv radu.
- Mikulas Dite
- Člen | 756
Tohle vypadá podezřele:
$form->onSubmit[] = array($this, 'CreateComponentCompetitionAddQuestionForm_onSubmit');
jednak to má být createComponent
s malým c
, ale
hlavně je to callback onSubmit
a né továrnička. To sice není
ten problém, ale stejně mi to nedalo.
K věci: addSubmit
a onSubmit
spolu vůbec
nesouvisí. První je input, druhé callback na serveru. Vymazáním tlačítka
se onSubmit
nevymaže. Co myslíš nedá odeslat? Ajax
vrací chybu/submit nic nedělá/…? Jestli můžeš, pošli na nějaký
pastebin celou (ne nutně úplně celou) továrničku – třeba se
z nějakého důvodu při ajaxu nezaregistruje do stromu komponent.
- Mikulas Dite
- Člen | 756
Tak měl bych pár nápadů
- registruj formulář rovnou:
$form = new AppForm($this, $name);
kde$name
získáš jako argumentprotected function createComponentCompetitionAddQuestionForm($name)
- tu metodu, která se volá po submitu vyčisti a zkontroluj, že bez změn jde formulář odesílat
- – jestli ano (a nevidím důvod, proč by nešel), zkusil bych si pro
jistou dumpnout
$form->onSubmit[]
, jestli se někde náhodou neztrácí
A co se stane, když klikneš na ten nový submit (po ajax změně)?
- Flipajs
- Člen | 29
Z nějakého neznámho důvodu se mi neprovede toto:
$values = $form->getValues();
(když odešlu změněný
form)
Tak pracuju s $_POST[‚…‘] a to se zdá že funguje. Nic moc elegantního, ale potřebuju jenom něco celkem rychle napsat a asi to nebudu moc hrotit a zůstanu u neelegantního řešení, protože s laděnkou se nějako nekamarádím a nejde mi dumpovat když používám AJAX (což je asi normální)… Přes FireBug jsem alespoň zjistil jestli mi form odesílá vše jak má – a to odesílá. Jenom při každé změně zapomene ty předešlé, takže je pak musím předávat pomocí addHidden, ale i to jsem schopen překousnout :-x (prasátko =D )
tu metodu, která se volá po submitu vyčisti a zkontroluj, že bez změn jde formulář odesílat
Toto jsem moc nepochopil…
Každopádně díky za radu