From e133487d4a9165c412090816e823c737c370ffd1 Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Tue, 18 Aug 2020 14:27:19 +0200 Subject: [PATCH] Propagate reset to defaults to other forms --- js/persist.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) 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; }