Validace podle stisknutého tlačítka

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
-

Mám jeden velky formular v nem je hlavni tlacitko a pak vedlejsi tlacitko, kterým se dá přihlásit. Potřebuji nějak zajistit, aby když se přihlašuji, tak byly vyplněny právě mail a heslo. Pokud stisknu hlavni tlacitko tak me tenhle prihlasovaci podformular vubec nezajimá. Jde to nějak jednoduše udělat? Nebo musím využít onValidate?

David Matějka
Moderator | 6445
+
0
-

dve moznost:

$form->addText('foo')->addConditionOn($form['button'], $form::SUBMITTED)->addRule($form::FILLED);

nebo

$form->addSubmit('button')->setValidationScope(array($form['foo'], $form['bar']));
$form->addSubmit('fooButton')->setValidationScope(FALSE);

do validation scope muzes dat bud array controlu nebo containeru, ktere maji validovat, nebo FALSE, coz nebude validovat nic (ale onValidate se myslim zavola vzdy..)

japlavaren
Člen | 404
+
0
-

ja by som na to druhe tlacitko ktore nic nerobi pouzil setValidationScope(FALSE)

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

@matej21 díky! použil jsem validationScope, ja měl za to, že se používá jen pro zakázání validace…

Aurielle
Člen | 1281
+
0
-

@JiříNápravník kdysi dávno to tak fungovalo, nicméně tahle funkce je celou dobu zamýšlena tak, aby šly validovat různé části formuláře nezávisle :)

libik
Člen | 96
+
0
-

Stale mam https://forum.nette.org/…te-callbacku bez odpovedi, tak se pridam sem, protoze ten zaklad je podobny – akorat chci provadet vlastni validaci pres $form->onValidate[].
Jak tam zajistim, aby se validace provadela jen u ‚submit‘ tlacitka? getValidationScope() mi prestal na 2.2.3 fungovat.

Mam po odeslani formulare:

DEBUGGER::firelog($form->submitted); //true
DEBUGGER::firelog($form['cancel']->isSubmittedBy()); //false
DEBUGGER::firelog($form['submit']->isSubmittedBy()); //false
DEBUGGER::firelog($form['submit']->getValidationScope()); //null
DEBUGGER::firelog($form['cancel']->getValidationScope()); //[ ]

Ve 2.1.1 mi fungovalo:

if ($form->submitted->getValidationScope() === NULL) {}

Ted koncim na Call to a member function getValidationScope() on a non-object in … protoze $form->submitted je (boolean) true;

EDIT: zajimave, ze mam tuto potiz jen na dev na localhostu, na serveru to funguje a $form->submitted je (object) Nette\Forms\Controls\SubmitButton :o
Ale nemam ted aktualizovane vsechny skripty v app (config i bootstrap jsou shodne, vcetne knihoven) z duvodu rozpracovanych nekterych casti. Takze bota asi bude nekde jinde.

Editoval libik (18. 9. 2014 10:39)

libik
Člen | 96
+
0
-

Tak uz jsem na to prisel, zpusobuje to nette.ajax.js