Ajaxové vypisování errorů po odeslání formuláře
- crassus
- Backer | 78
Dobrý den,
mám presenter, na kterém ajaxově načítám formulář a snažím se rozjet
errorové hlášky. Kromě errorů formulář jinak funguje dobře. Chtěl bych,
aby se mi po odeslání formuláře vypsala errorová hláška, ale místo toho
se obnoví celá stránka, nezobrazí se error a už ani nejde vidět ten
původní formulář, protože ho předtím načítám ajaxem. Každopádně
funkce validateOnlineForm se zavolá, protože to vydumpuje chybovou
hlášku.
Jde nějak udělat, aby se po odeslání formuláře neobnovovala stránka a zároveň, aby se error přidal do formu a vykreslil přes ajax?
Prosím poraďte.
public function createComponentOnlineForm()
{
...
$form->onValidate[] = array($this, 'validateOnlineForm');
}
public function validateOnlineForm($form)
{
$form->addError('chybova hlaska');
$this->invalidateControl('batchSnippet');
Debugger::barDump($form->errors[0]);
}
{snippet batchSnippet}
...
<form n:name=onlineForm class=form>
...
<ul class="errors" n:if="$form->hasErrors()">
<li n:foreach="$form->errors as $error">{$error}</li>
</ul>
</form>
{/snippet}
S úctou,
Lukáš
Editoval crassus (8. 3. 2015 0:24)
- ODIS
- Člen | 33
Jestli ho loaduješ až po té inicializaci, tak to bude možná důvod, proč ti to nejede. Ta inicializace dělá zjednodušeně řečeno to, že vezme prvky s classou „ajax“ a naváže na ně event, který zajišťuje ajaxovou komunikaci. Takže zkus například po načtení toho formuláře znovu zavolat $.nette.init().
- ODIS
- Člen | 33
Pomohlo by, kdybys tady dal více kódu, který je relevantní k tvému problému. Dej si načítání JS, ve kterém voláš nette.init() do snippetu a po překleslení snippetu, ve kterém se objeví formulář, překresli snippet, ve kterém bude zmíněný skript – tím se ti znovu inicializuje nette ajax a mohlo by to jet. Další možností je dát si do templatu, ve kterém je form kousek JS kódu, ve kterém provedeš nette.init(). Pokud ti to stále nebude šlapat, hoď tady více kódu, který se týká práce s tím formulářem.