Problém s „Maximum call stack size exceeded“ v netteForms.js z Nette 3
- JL
- Člen | 24
Ahoj,
mám formulář kde potřebuji pravidlo, že pokud je vyplněno A, musí být vyplněno B a naopak (viz příklad níže).
S javascriptem netteForms.js z Nette 2.4 vše funguje, ale po upgrade na Nette 3 a výměně netteForms.js se mi ten javascript cyklí:
Uncaught RangeError: Maximum call stack size exceeded
at String.match (<anonymous>)
at Object.Nette.getValue (netteForms.js:89)
at Object.Nette.getEffectiveValue (netteForms.js:116)
at Object.Nette.validateRule (netteForms.js:305)
at Object.Nette.validateControl (netteForms.js:156)
at Object.Nette.getEffectiveValue (netteForms.js:124)
at Object.Nette.validateRule (netteForms.js:305)
at Object.Nette.validateControl (netteForms.js:156)
at Object.Nette.getEffectiveValue (netteForms.js:124)
at Object.Nette.validateRule (netteForms.js:305)
Příklad formuláře:
public function createComponentForm(): Form
{
$form = $this->formFactory->create();
$nameInput = $form->addText('name', 'Jméno')
->setNullable(true);
$surnameInput = $form->addText('surname', 'Příjmení')
->setNullable(true);
$surnameInput->addConditionOn($nameInput, Form::FILLED)
->addRule(Form::REQUIRED, 'Zadejte prosím příjmení');
$nameInput->addConditionOn($surnameInput, Form::FILLED)
->addRule(Form::REQUIRED, 'Zadejte prosím jméno');
$form->addSubmit('save', 'Uložit');
$form->onSubmit[] = function (Form $form): void {
$this->processForm($form);
};
return $form;
}
Jak z toho ven? Mám ta pravidla špatně, nebo je to issue javascriptu k nette/forms?
Edit: Asi je to toto issue (https://github.com/…s/issues/161), nicméně mně se to projevuje jen s verzí pro Nette 3.
Editoval JL (14. 8. 2019 11:52)
- JL
- Člen | 24
Myslíš sekci Validace celého formuláře ?
To mi bohužel nepomůže – PHP validaci toho aby mi neprošla nevalidní data mám zajištěnou v modelu, o to nejde. Na formulář mám napojenou contributte live form validaci, která je založená na netteForms.js a fungovala moc hezky. Jenže teď už ne, protože se v nette forms vrátilo to issue #161.