JS callback zavolaný před validací s možností zastavit Nette validaci
- mesour
- Nette Blogger | 236
Zdravím, zrovna mám na jedno webu potřebu při určitém stavu vypnout Nette validaci, ale když udělám na formulář vlastní onSubmit, tak se tím Nette validace nazastaví. Proto jsem udělal jednoduchý zásah do netteForms.js.
Použití je následující:
<script>
var form_element = document.getElementById('my-form-id');
form_element[Nette.beforeSubmit] = function(form) {
//tady bude vlastní validace
//callback vrací buď true pokud je validní a nebo false pokud není validní
};
</script>
Změny v netteForms.js:
<script>
//přidán řádek
Nette.beforeSubmit = 'nette-beforeValidate';
//v metodě Nette.initForm na místě, kde se přidává event onSubmit je callback následující
Nette.addEvent(form, 'submit', function() {
if(typeof form[Nette.beforeSubmit] === 'function') {
if(form[Nette.beforeSubmit](form)) {
return Nette.validateForm(form);
} else {
return false;
}
}
return Nette.validateForm(form);
});
</script>
Ještě mě napadlo, že by se Nette validace vůbec nemusela na formuláři inicializovat. Takže ji nějakým způsobem preventnout. Udělal bych na něj vlastní onSubmit event a v něm bych zavolal Nette.validateForm(form), pokud by prošla vlastní validace. V tom případě by se ale muselo zvlášť řešit například toggleForm a submittedBy.
Edit: Vlastně by pokud by byla preventnutá inicializace JS validace stačilo po tom, co projde vlastí validací zavolat .initForm a hned potom .validateForm, tím se vyřeší toggle a submittedBy :)
Napadne někoho jiné, lepší nebo čistější řešení?
Editoval mesour (10. 4. 2014 4:42)
- mesour
- Nette Blogger | 236
Vím, že je hnus přepisovat jakýkoliv kód Frameworku, v PHP bych si to nedovolil, ale co se týče Javascriptu jsem tolerantnější. Navíc zůstala původní funkcionalita zachovaná, pouze jsem přidal něco navíc.
Takže nikoho nenapadá nic lepšího? :)
Editoval mesour (10. 4. 2014 4:39)