2025-07-03 13:54:01 +08:00
|
|
|
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) {
|
|
|
|
for (let i = 0; i < elements.length; i++) {
|
|
|
|
let Event = []
|
|
|
|
let isEvent = false
|
|
|
|
let removeName = []
|
|
|
|
if (!elements[i] || !elements[i].attributes) {
|
2025-07-09 11:26:33 +08:00
|
|
|
continue
|
2025-07-03 13:54:01 +08:00
|
|
|
}
|
|
|
|
for (let m of elements[i].attributes) {
|
|
|
|
switch (m.name) {
|
|
|
|
case '@model': {
|
|
|
|
isEvent = true
|
|
|
|
if (elements[i].type == 'checkbox') {
|
|
|
|
Event.push((e) => { that[m.value] = e.target.checked })
|
|
|
|
elements[i].checked = that[m.value]
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
Event.push((e) => {
|
|
|
|
let value = e.target.value
|
|
|
|
if (e.target.type == 'number') {
|
|
|
|
if (e.data != '.' && (e.data != '-' || e.target.value)) {
|
|
|
|
value = Number(value)
|
2025-07-09 11:26:33 +08:00
|
|
|
if ((e.target.max) && value > Number(e.target.max)) {
|
2025-07-03 13:54:01 +08:00
|
|
|
value = Number(e.target.max)
|
2025-07-09 11:26:33 +08:00
|
|
|
e.target.value = value
|
2025-07-03 13:54:01 +08:00
|
|
|
}
|
2025-07-09 11:26:33 +08:00
|
|
|
if ((e.target.min) && value < Number(e.target.min)) {
|
2025-07-03 13:54:01 +08:00
|
|
|
value = Number(e.target.min)
|
2025-07-09 11:26:33 +08:00
|
|
|
e.target.value = value
|
2025-07-03 13:54:01 +08:00
|
|
|
}
|
2025-07-09 11:26:33 +08:00
|
|
|
if ((e.target.dataset.min) && value < Number(e.target.dataset.min)) {
|
2025-07-03 13:54:01 +08:00
|
|
|
value = Number(e.target.dataset.min)
|
|
|
|
}
|
|
|
|
that[m.value] = value
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
that[m.value] = value
|
|
|
|
}
|
|
|
|
})
|
2025-07-09 11:26:33 +08:00
|
|
|
if (elements[i].nodeName == 'IMG') {
|
2025-07-03 13:54:01 +08:00
|
|
|
elements[i].src = that[m.value]
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
elements[i].value = that[m.value]
|
|
|
|
}
|
|
|
|
}
|
2025-07-09 11:26:33 +08:00
|
|
|
if (this.element[m.value]) {
|
2025-07-03 13:54:01 +08:00
|
|
|
this.element[m.value].push(elements[i])
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
this.element[m.value] = [elements[i]]
|
|
|
|
}
|
|
|
|
removeName.push(m.name)
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case '@click': {
|
|
|
|
elements[i].addEventListener('click', (e) => {
|
|
|
|
if (typeof (that[m.value]) === 'function') {
|
|
|
|
that[m.value](e)
|
|
|
|
}
|
|
|
|
});
|
|
|
|
removeName.push(m.name)
|
|
|
|
// elements[i].attributes.removeNamedItem(m.name)
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case '@change': {
|
|
|
|
isEvent = true
|
|
|
|
Event.push((e) => {
|
|
|
|
let value = e.target.value
|
2025-07-09 11:26:33 +08:00
|
|
|
if (e.target.type == 'number' && value != '') {
|
2025-07-03 13:54:01 +08:00
|
|
|
value = Number(value)
|
|
|
|
e.target.value = value
|
|
|
|
}
|
|
|
|
if (typeof (that[m.value]) === 'function') {
|
|
|
|
that[m.value](e, value)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// elements[i].attributes[m] = undefined
|
|
|
|
}
|
2025-07-09 11:26:33 +08:00
|
|
|
for (let n = 0; n < removeName.length; n++) {
|
2025-07-03 13:54:01 +08:00
|
|
|
elements[i].attributes.removeNamedItem(removeName[n])
|
|
|
|
}
|
|
|
|
|
|
|
|
if (isEvent) {
|
|
|
|
let ventType = 'input'
|
|
|
|
if (elements[i].tagName != 'INPUT' || elements[i].type == 'checkbox') {
|
|
|
|
ventType = 'change'
|
|
|
|
}
|
|
|
|
elements[i].addEventListener(ventType, (e) => {
|
|
|
|
for (let t = 0; t < Event.length; t++) {
|
|
|
|
Event[t](e)
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
const EventBinding = new eventBinding();
|
2025-07-09 11:26:33 +08:00
|
|
|
export default EventBinding;
|