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
+
0
-

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.

enumag
Člen | 2118
+
0
-

Leda přepsat tu nettí validační fci nějakou vlastní (a případně pak zavolat tu původní). Žádný callback tam myslím není.

Editoval enumag (14. 10. 2013 14:29)

Petr Tvaroha
Člen | 25
+
+1
-

@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.

  1. 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>
  1. 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
+
+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>