-
-
Notifications
You must be signed in to change notification settings - Fork 151
Description
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:
item1with a rule to toggleitem2on a certain valueitem2with a rule to toggleitem3item4with a rule to toggleitem3, anditem5that 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.
forms/src/assets/netteForms.js
Lines 611 to 616 in ffdffaa
| for (i = 0; i < form.elements.length; i++) { | |
| if (form.elements[i].tagName.toLowerCase() in {input: 1, select: 1, textarea: 1, button: 1}) { | |
| Nette.toggleControl(form.elements[i], null, null, !event); | |
| } | |
| } | |