diff --git a/source/components/form/form.mjs b/source/components/form/form.mjs index 2cf205071bcff30bc363135df5206bbfa6230397..464f8b1154faa0287f11b98a93259e18ad768a41 100644 --- a/source/components/form/form.mjs +++ b/source/components/form/form.mjs @@ -74,11 +74,11 @@ class Form extends DataSet { }, writeBack: { - events: ["change", "input", "keyup"], + events: ["keyup", "click", "change", "drop", "touchend", "input"] }, bind: { - events: ["keyup", "click", "change", "drop", "touchend", "input"], + events: ["keyup", "click", "change", "drop", "touchend", "input"] }, reportValidity: { @@ -170,23 +170,41 @@ function initEventHandler() { this.addEventListener(event, (e) => { const element = findTargetElementFromEvent(e, ATTRIBUTE_FORM_BIND); - if (element === undefined) { + if (!(element instanceof HTMLElement)) { return; } - if (this[debounceBindSymbol][element] instanceof DeadMansSwitch) { + let elementID = element.id; + + if (id === "") { + elementID = element.getAttribute("name"); + } + + if (id === "") { + elementID = element.getAttribute("data-monster-attributes"); + } + + if (id === "") { + elementID = element.innerText.substring(0, 20); + } + + elementID = elementID.replace(/\s/g, "_") + + if (this[debounceBindSymbol][elementID] instanceof DeadMansSwitch) { try { - this[debounceBindSymbol][element].touch(); + this[debounceBindSymbol][elementID].touch(); return; } catch (e) { if (e.message !== "has already run") { throw e; } - delete this[debounceBindSymbol][element]; + + delete this[debounceBindSymbol][elementID]; } } - this[debounceBindSymbol][element] = new DeadMansSwitch(200, () => { + this[debounceBindSymbol][elementID] = new DeadMansSwitch(200, () => { + delete this[debounceBindSymbol][elementID]; retrieveAndSetValue.call(this, element); }); });