Validace při odeslání tlačítkem s NULLovým validationScope (AJAX)

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
uestla
Backer | 799
+
0
-

Zdravím.

V onSubmit metodě formuláře, který má dvě tlačítka (‚register‘ a ‚cancel‘, přičemž ‚cancel‘ má NULLovou validationScope), mám následující:

if ($form['register']->isSubmittedBy()) {
	UserModel::createAccount($form->getValues());
	$this->flashMessage('Váš účet byl úspěšně vytvořen. Nyní se můžete přihlásit.', 'success');
}

$this->redirect('Auth:login');

Na formuláře mám pak navěšenou onsubmit metodu (přičemž náš formulář má přidělenou class ‚ajax‘):

$('form.ajax').live('submit', function (event) {
	event.preventDefault();

	$(this).ajaxSubmit();
});

Když ale formulář odešlu přes AJAX tlačítkem ‚cancel‘, neprovede se očekávané přesměrování, ale validace všech prvků – prostě jako by byl odeslán prvním tlačítkem. S vypnutým JS se přesměruje v pořádku.

V čem může být zádrhel? Předem díky (Nette 1.0-dev)…

Editoval uestla (28. 5. 2010 14:43)

srigi
Nette Blogger | 558
+
0
-

Nainstaluj si do Firefoxu bud „Tamper data“ alebo „httpfox“ a porovnaj obe odoslania. Je mozne, ze ajax submit neposiela name=>value tlacitka, ktore bolo stacene. Nejako to v tom ajaxsubmit napodobni aby sa to posielalo.

uestla
Backer | 799
+
0
-

srigi napsal(a):

Nainstaluj si do Firefoxu bud „Tamper data“ alebo „httpfox“ a porovnaj obe odoslania. Je mozne, ze ajax submit neposiela name=>value tlacitka, ktore bolo stacene. Nejako to v tom ajaxsubmit napodobni aby sa to posielalo.

Je to pravda, když navěsím ajaxSubmit() na formulář, tak se stisknuté tlačítko neposílá – je třeba to navěsit na submit tlačítka:

$('form.ajax :submit').live('click', function (event) {
	event.preventDefault();

	$(this).ajaxSubmit();
});

S tím ale vyvstává další problém, a sice že při odeslání se provede jak validace na straně klienta (klasické alerty), tak ale také odeslání AJAXem. O tom už jsem četl tady, a nevím, jestli existuje „hezčí“ řešení…

Editoval uestla (28. 5. 2010 14:53)