1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import Vue from 'vue'
//input 限制输入正整数
//v-toInt={maxNum: 最大值,notNum:不等于}
Vue.directive('toInt', {
// 指令的定义
inserted: function(el, binding, vnode) {
let dom = null
if (el.tagName == 'INPUT') {
dom = el
} else {
dom = el.querySelector('input')
}
dom.addEventListener("input", function() {
//进行验证
if (binding.value) {
checkedfun(dom, binding.value.maxNum, binding.value.notNum)
} else {
checkedfun(dom, null, null)
}
});
function checkedfun(el, maxNum, notNum) {
if (maxNum && el.value > maxNum) {
el.value = maxNum
el.dispatchEvent(new Event("input"));//调用input事件使vue v-model绑定更新
}
if (notNum && typeof (notNum) !=='undefined' && el.value === notNum.toString()) {
el.value = ''
el.dispatchEvent(new Event("input"));//调用input事件使vue v-model绑定更新
}
let reg = new RegExp("^[0-9]*$");
if (!reg.test(el.value)) {
el.value = el.value.replace(/[^0-9]+/g, "");
el.dispatchEvent(new Event("input"));//调用input事件使vue v-model绑定更新
}
}
}
})