netteForms.js – onValidate obdoba

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Jiří Nápravník
Člen | 710
+
0
-

Jde nějak udělat s netteForms, abych tam mohl přidat ještě nějakou vlastní validaci?

Mám několik políček, každý má svoje validatory, které kontroluje netteForms, a já teď potřebuji, pokud je vše v pohodě u tohohle, tak aby se zavolala ještě jedna funkce, která zkonbtroluje ještě nějaký věci (co nejdou formulářema řešit). Zkrátka nějaká proměnná, kam navážu callback, který když vyplním tak je před samotným submittem zavolán?

honos
Člen | 109
+
0
-

Podivej se od tud az sem

Jiří Nápravník
Člen | 710
+
0
-

To mám samozřejmě načtené, ale nijak to neřeší můj problém. Píšu, že potřebuju nějak přidat vlastní validaci k té Nette validaci.

A nejde ot řešit (javascriptově v rámci) netteForms apod. Budou to dynamicky načtené inputy, pak je všechny vezmu, a zkontroluju v ajaxu proti databázi, no to je zbytečné popisovat.

Zkrátka potřebuji nějaký takovýhle workflow:

  1. provede se standardní netteForms
  2. provede se moje nete validace (pokud je netteforms ok)
  3. pokud je i 2 splneno pak se teprve odešle
David Matějka
Moderator | 6445
+
0
-

mohlo by stacit stacit:

$("#my-form").submit(function(e) {
	var $form = $(this);
	var valid = true;
	...
	if(!valid) {
		e.preventDefault();
		return false;
	}
});
Jiří Nápravník
Člen | 710
+
0
-

To sice funguje, ale přesně obráceně provede se prvně moje validace a pak teprve ta netteForms… Jedině, že bych nějak odchytil ten netteFarms onsubmit, a pak ho odbindoval a pak nabindoval az za tenhle, ale jestli to vubec pujde…

Je škoda, že nějaký takový event není možno navázat v rámci

xificurk
Člen | 121
+
0
-

Prasácké řešení, které fungovat bude, je předefinovat Nette.validateForm.

var netteValidation = Nette.validateForm;
Nette.validateForm = function (sender) {
	return netteValidation(sender) && myValidation(sender);
};
Jiří Nápravník
Člen | 710
+
0
-

Díky za hint, nakonec jsem to pořešil hodně podobně, jen jsem si takhle „přetížíl“ Nette.initForm.

var netteInitForm = Nette.initForm;

Nette.initForm = function(form) {
	if($(form).data('netteForms') === 'off'){
		return;
	}
	netteInitForm(form);
};

ted mi staci formu u ktereho nechci netteForms nastavit data-nette-forms=„off“ a pak si poresim validaci vlastni. Přičemž si zavola validateForm z netteForms ručně

Editoval Jiří Nápravník (14. 1. 2014 22:46)

honos
Člen | 109
+
0
-

A co tento js kdybys ho trochu poupravil aby neodesilal ajaxem resp. aby před odeslanim provedl jeste tvou validaci tak by to mozna slo? jednoduse navesis validacni funkci a hotovo :-\

Jiří Nápravník
Člen | 710
+
0
-

Mě teď stačí a funguje to řešení, co jsem postl. A myslím, že by se tohle bilo s nette.ajax.js – aspoň je doporuováno, všechny tyhle ajax věci vyřadit…

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

V nette.ajax.js by to šlo řešit následovně myslím:

$.nette.ext('custom-forms-validation', {
	before: function (xhr, settings) {
		if (!settings.nette || !settings.nette.form) {
			return;
		}

		var form = settings.nette.form; // here is jQuery encapsulated element of form
		var result = ... do your custom validation ...
		return result; // if false, will prevent request from being executed
	}
});

Mělo by se to provést až po Nette validaci.

Jiří Nápravník
Člen | 710
+
0
-

vojtech.dobes Já ten form odesílám klasicky ne-ajaxově, či-li before: využít nemohu. Já chci jen ajaxem provést tu samotnou kontrolu a pak klasický click. či-li to navazuji v load

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Ach tak, v tom případě jasně.

honos
Člen | 109
+
0
-

Jiří Nápravník napsal(a):

vojtech.dobes Já ten form odesílám klasicky ne-ajaxově, či-li before: využít nemohu. Já chci jen ajaxem provést tu samotnou kontrolu a pak klasický click. či-li to navazuji v load

A proč vlastne neprovedes odesilani ajaxove a nasledne provest presmerovani kam potrebujes?