Files
sdk4.0/src/Obj/Element/Dialog/eventBinding.js
2025-08-22 18:49:45 +08:00

131 lines
4.0 KiB
JavaScript

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) && 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 < Number(e.target.dataset.min)) {
value = Number(e.target.dataset.min)
}
}
}
})
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 < Number(e.target.dataset.min)) {
value = Number(e.target.dataset.min)
}
}
that[m.value] = value
})
}
else {
Event.input.push((e) => {
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;