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) {
|
|
|
|
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)) {
|
2025-08-12 11:50:19 +08:00
|
|
|
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)
|
2025-07-03 13:54:01 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
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)
|
|
|
|
}
|
2025-07-17 10:45:42 +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 {
|
|
|
|
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)
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-07-17 10:45:42 +08:00
|
|
|
export default EventBinding;
|