Propagate reset to defaults to other forms

This commit is contained in:
Kamil Trzcinski
2020-08-18 14:27:19 +02:00
parent 13b131adbe
commit e133487d4a

View File

@ -39,7 +39,7 @@ function resetFormToDefaults(form) {
setPersistedValue(element, null); setPersistedValue(element, null);
if (element.defaultValue) { 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") { if (element.type == "radio") {
var realValue = (value == element.value); var realValue = (value == element.value);
@ -97,11 +97,18 @@ function setFormItemValue(element, value) {
element.value = value; element.value = value;
} }
// 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); element.dispatchEvent(persistChangeEvent);
} }
function persistFormValue(event) { function persistFormValue(event) {
// ignore cascade updates // ignore cascade updates generated by `setFormItemValue`
// unless `forcePropagate=true`
if (persistChangeEvent == event) { if (persistChangeEvent == event) {
return; return;
} }