Souvisí netteForms.js s AJAXovým zpracováním formuláře?
- Šaman
- Člen | 2659
Souvisí nějak netteForms.js
s AJAXovým zpracováním
formuláře? Konkrétně při zpracování chyb.
Mám formulář, zajaxuji ho a všechno vypadá funkční, odesílá se ajaxem a
při chybě se zastaví zpracování a vyskočí alert.
A právě ten alert se mi nelíbil, tak jsem přestal načítat
netteForms.js
a formuláři jsem přidal atribut
'novalidate' => 'novalidate'
, takže veškerá validace
probíhá jen na serveru.
Problém je, že v obsluze události onError
je
isAjax() === FALSE
, takže se mi překreslí celé okno. Při
úspěšném odeslání je to v pohodě, formulář se zpracuje ajaxově.
Napadlo mě tedy, jestli při tom zpracování chyby nějak neasistuje právě ten nenačtený script. Sice to v tom kódu nevidím, ale s JS nejsme kamarádi, tak se radši ptám.
- Šaman
- Člen | 2659
Au! Tak ano, závislost tam je, na což už pár lidí narazilo.
Musím říct, že je to docela zrada, zvlášť když
nette.forms.js
ignorují atribut novalidate
nette.ajax.js
ignoruje atribut novalidate
přesto, že
samotné nette.forms.js
ho zohledňují.
Řešení jsou dvě. První je popsané v tom druhém odkazu výše. Pokud
opravdu nechcete používat nette.forms
, tak si upravte
inicializaci ajaxu takto:
$(function () {
Nette={};
$.nette.init();
});
Při zkoumání tohoto problému jsem si ale všiml že
nette.forms
jsou nutné i pro togglování a že samy o sobě
ctí novalidate
a navíc jak je vidět, některé knihovny s nimi
tiše počítají. Takže je můžeme nechat přilinkované, ale v konfiguraci
nette.ajax
vypneme validaci formulářů. Buď pro konkrétní
odesílací tlačítko:
{input ok, class=>'ajax', data-ajax-validate=>'{"form":false}'}
Nebo globálně:
$(function () {
$.nette.ext('validation').defaults.form = false;
$.nette.init();
});
P.S. Netestoval jsem to úplně do hloubky, takže nevím jak to bude fungovat s togglováním a podobnými srandičkami. Ale na mém projektu to funguje.
A ještě by mě zajímalo, jak se v nette.ajax.js
upravuje
objekt setting? Jde to nějak globálně, nebo pro každou extension zvlášť?
Asi to bude primitivní, ale já a Ajax střídáme válečný stav a opatrné
příměří. Takže žádná sláva…