forms
forms copied to clipboard
toggleForm validates rules of hidden items
Version: 3.1.6
Bug Description
When there are toggle rules nested into elements which are in turn subjects of possible toggling, a specific situation may occur where, if a value was set while the item was displayed, but then the item is hidden, toggleForm()
will continue to evaluate those rules against the hidden items. The consequence is that, for example, certain items keep being displayed when they should not be, or the user might not be able to submit a form due to a validation issue on an item that is hidden.
Steps To Reproduce
Set for example the following radio buttons:
-
item1
with a rule to toggleitem2
on a certain value -
item2
with a rule to toggleitem3
-
item4
with a rule to toggleitem3
, and -
item5
that has no toggle rules set
Then select item1
in order to toggle item2
, then item2
in order to toggle item3
.
Lastly, select item5
.
Expected Behavior
When selecting item5
, you should no longer see item3
.
Possible Solution
toggleForm()
should only call toggleControl()
on controls that currently displayed.
Plus, I think the controls should be also reset when toggled out, to prevent data from being submitted unbeknownst to the user.
https://github.com/nette/forms/blob/ffdffaa75c368871dfefb93aff8717380cf504c8/src/assets/netteForms.js#L611-L616