123 lines
3.6 KiB
JavaScript
123 lines
3.6 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) {
|
||
|
for (let i = 0; i < elements.length; i++) {
|
||
|
let Event = []
|
||
|
let isEvent = false
|
||
|
let removeName = []
|
||
|
if (!elements[i] || !elements[i].attributes) {
|
||
|
continue
|
||
|
}
|
||
|
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)
|
||
|
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 !== 'undefined' && e.target.dataset.min !== '') {
|
||
|
let min = Number(e.target.dataset.min)
|
||
|
if(value<min) {
|
||
|
value = min
|
||
|
}
|
||
|
}
|
||
|
that[m.value] = value
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
that[m.value] = 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': {
|
||
|
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
|
||
|
if(e.target.type == 'number' && value!='') {
|
||
|
value = Number(value)
|
||
|
e.target.value = value
|
||
|
}
|
||
|
if (typeof (that[m.value]) === 'function') {
|
||
|
that[m.value](e, value)
|
||
|
}
|
||
|
})
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
// elements[i].attributes[m] = undefined
|
||
|
}
|
||
|
for(let n=0;n<removeName.length;n++) {
|
||
|
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();
|
||
|
export default EventBinding;
|