class EventBinding { constructor() { this.element = {} } static event = {} getEvent(name) { return EventBinding.event[name] } getEventAll() { return EventBinding.event } setEvent(name, event) { EventBinding.event[name] = event } on(that, elements) { this.element = {} for (let i = 0; i < elements.length; i++) { if (!elements[i] || !elements[i].attributes) { continue; } let Event = { 'input': [], 'change': [], 'blur': [], 'click': [] } let isEvent = false let removeName = [] for (let m of elements[i].attributes) { switch (m.name) { case '@model': { isEvent = true if (elements[i].type == 'checkbox') { Event.change.push((e) => { that[m.value] = e.target.checked }) elements[i].checked = that[m.value] } else { if (elements[i].type == 'number') { Event.input.push((e) => { if (e.target.value || e.target.value === 0) { let value = e.target.value value = Number(value) if (e.data != '.' && (e.data != '-' || e.target.value)) { if (((!e.target.max) && (!e.target.min)) || ((value <= Number(e.target.max)) && value >= Number(e.target.min))) { that[m.value] = value } } } }) Event.blur.push((e) => { let value = e.target.value if (e.target.value || (e.target.dataset.null !== 'undefined' && e.target.dataset.null !== '' && !Boolean(e.target.dataset.null))) { value = Number(value) if ((e.target.max) && value > Number(e.target.max)) { value = Number(e.target.max) } if ((e.target.min) && value < Number(e.target.min)) { value = Number(e.target.min) } if((e.target.dataset.min) && value { that[m.value] = e.target.value }) } if (elements[i].nodeName == 'IMG') { elements[i].src = that[m.value] } else { elements[i].value = that[m.value] } } if (this.element[m.value]) { this.element[m.value].push(elements[i]) } else { this.element[m.value] = [elements[i]] } removeName.push(m.name) break; } case '@click': { isEvent = true Event.click.push((e) => { if (typeof (that[m.value]) === 'function') { that[m.value](e) } }) removeName.push(m.name) break; } } // elements[i].attributes[m] = undefined } for (let n = 0; n < removeName.length; n++) { elements[i].attributes.removeNamedItem(removeName[n]) } if (isEvent) { for (let key in Event) { if (Event[key].length > 0) { elements[i].addEventListener(key, (e) => { for (let t = 0; t < Event[key].length; t++) { Event[key][t](e) } }); } } } } } } export default EventBinding;