Validace formuláře přes onValidate tlačítkem se setValidationScope(FALSE)
- radas
- Člen | 226
Ahoj,
mám ve formuláři dvě tlačítka:
$this->addSubmit('save', 'Uložit');
$this->addSubmit('delete', 'Smazat')
->setValidationScope(FALSE);
V JS se to chová přesně tak jak má, tedy tlačítko Smazat nic nevaliduje.
V továrničce mám toto:
$form->onValidate[] = $this->editFormValidated;
$form['save']->onClick[] = $this->editFormSaved;
$form['delete']->onClick[] = $this->editFormDeleted;
Zajímalo by mě, z jakého důvodu se po stisknutí tlačítka Smazat volá funkce navěšená na události onValidate, když tlačítko definovalo setValidationScope(FALSE).
Samozřejmě v té validační metodě to můžu ošetřit podmínkou podle stisknutého tlačítka, ale jde mi spíše o logiku věci. Očekával jsem, že se onValidate zavolá na všech tlačítkách, které nemají setValidationScope(FALSE).
Díky
- old.gandalf
- Člen | 17
onValidate[] callbacky jsou volány vždy, setValidationScope() je nevypíná. Ta má vliv pouze na vypnutí pravidla nasazeného na konkrétní prvek voláním
$form['tweet']->addRule(Form::MAX_LENGTH, "Vstup je příliš dlouhý.", 160);
$form['submitButton']->setValidationScope(FALSE); //ověření délky neproběhne
- David Matějka
- Moderator | 6445
jak pise @old.gandalf
Ale u containeru se to chova jinak, viz doc https://doc.nette.org/cs/forms#…