diff --git a/js/persist.js b/js/persist.js index 46f9d80..548d312 100644 --- a/js/persist.js +++ b/js/persist.js @@ -39,7 +39,7 @@ function resetFormToDefaults(form) { setPersistedValue(element, null); if (element.defaultValue) { - setFormItemValue(element, element.defaultValue); + setFormItemValue(element, element.defaultValue, true); } } } @@ -72,7 +72,7 @@ function getFormItemValue(element) { } } -function setFormItemValue(element, value) { +function setFormItemValue(element, value, forcePropagate = false) { if (element.type == "radio") { var realValue = (value == element.value); @@ -97,11 +97,18 @@ function setFormItemValue(element, value) { element.value = value; } - element.dispatchEvent(persistChangeEvent); + // This will trigger `persistFormValue` + // that will propagate change into other forms + // but still execute `onchange=` assigned to elements + if (forcePropagate) + element.dispatchEvent(new Event('change')); + else + element.dispatchEvent(persistChangeEvent); } function persistFormValue(event) { - // ignore cascade updates + // ignore cascade updates generated by `setFormItemValue` + // unless `forcePropagate=true` if (persistChangeEvent == event) { return; }