From db47430f71b319ae62897639f0d44b11cd35fee8 Mon Sep 17 00:00:00 2001 From: Sandro Lutz <sandro.lutz@temparus.ch> Date: Sun, 31 Dec 2017 13:38:48 +0100 Subject: [PATCH] Change onchange to oninput (more intuitive behavior) --- src/views/formFields.js | 23 ++++++++++++++++++++++- src/views/jsonSchemaForm.js | 2 +- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/views/formFields.js b/src/views/formFields.js index b411a78e..5db38ae9 100644 --- a/src/views/formFields.js +++ b/src/views/formFields.js @@ -25,6 +25,7 @@ export class inputGroup { } args.value = vnode.attrs.value; args.onchange = vnode.attrs.onchange; + args.oninput = vnode.attrs.oninput; if (['radio', 'checkbox'].includes(args.type)) { return m('div', { class: groupClasses }, [ @@ -65,6 +66,14 @@ export class selectGroup { } vnode.attrs.onchange({ target: { name: e.target.name, value: this.value } }); }, + oninput: (e) => { + if (e.target.checked) { + this.value.push(e.target.value); + } else { + this.value = this.value.filter(item => item !== e.target.value); + } + vnode.attrs.oninput({ target: { name: e.target.name, value: this.value } }); + }, args: { type: 'checkbox' }, }))), ]); @@ -97,7 +106,18 @@ export class selectGroup { value.push(opt); } } - vnode.attrs.onchange(e); + vnode.attrs.onchange({ target: { name: e.target.name, value } }); + }, + oninput: (e) => { + const value = []; + let opt; + for (let i = 0; i < e.target.options.length; i += 1) { + opt = e.target.options[i]; + if (opt.selected) { + value.push(opt); + } + } + vnode.attrs.oninput({ target: { name: e.target.name, value } }); }, multiple: true, }, @@ -112,6 +132,7 @@ export class selectGroup { { value: vnode.attrs.value, onchange: vnode.attrs.onchange, + oninput: vnode.attrs.oninput, multiple: false, }, vnode.attrs.args.options.map(option => m('option', option)), diff --git a/src/views/jsonSchemaForm.js b/src/views/jsonSchemaForm.js index aa07e8f3..98887168 100644 --- a/src/views/jsonSchemaForm.js +++ b/src/views/jsonSchemaForm.js @@ -32,7 +32,7 @@ export default class JSONSchemaForm { if (!this.errors[attrs.name]) this.errors[attrs.name] = []; const boundFormelement = { - onchange: (e) => { + oninput: (e) => { // bind changed data this.data[e.target.name] = e.target.value; -- GitLab