Vlastní JS validace až po Nette validaci
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Petr Tvaroha
- Člen | 25
Ahoj,
používám vestavěnou Nette JS validaci, ale zároveň používám vlastní JavaScript k rozšíření pravidel. Zavěsím validační funkci, která validuje více prvků, pomocí JQuery na událost submit: $(‚#form‘).submit(bla bla bla).
Jde mi o to, že bych potřeboval, aby mi Nette validace proběhla před mojí validací. Teď je to tak, že nejdříve proběhne moje a pak Nette. Mohu mojí funkci nějak zavěsit na Nette validaci?
Předem moc díky za odpověď,
P.
- Petr Tvaroha
- Člen | 25
@enumag: Díky!
Tak jsem si s tím hrál a hrál, až jsem to musel hacknout. Není to úplně nejčistější řešení, ale funguje.
- v netteForms-hacked.js jsem v setup handleru zakomentoval zavěšení validace na submit event:
<script>
Nette.initForm = function(form) {
form.noValidate = 'novalidate';
/* HACKED - nutno zavolat validaci manuálně
Nette.addEvent(form, 'submit', function() {
return Nette.validateForm(form);
});
*/
// zbytek funkce
// ...
}
</script>
- ve vlastním skriptu jsem si pak zavolal validaci sám:
<script>
$('#form').submit(function(){
// volám Nette validaci
if (!Nette.validateForm(this)) {
return false;
}
// tady pokračuje moje vlastní validace
// ...
}
</script>
Tož kdyby to někdo potřeboval…
- boris.suska
- Člen | 1
@Petr Tvaroha: Díky za riešenie!
Ja ten tvoj hack len trochu vylepším. Takto by sa to mohlo napísať, ak by si nechcel meniť zdojáky Nette (napr. kvôli updatom).
<script>
// Global object
NetteOrigin = {
validateForm: Nette.validateForm
};
Nette.validateForm = function(form) {
var valid = NetteOrigin.validateForm(form);
if (!valid) {
return valid;
}
// custom validation
// return false to prevent form submission or true otherwise
}
</script>