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);
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;
}