let decimalPoint = 2
|
let patternStr = ''
|
patternStr = /^(\-)*(\d+)\.(\d\d).*$/
|
export default {
|
// 价格 正负数
|
inserted: function (el, binding, vnode) {
|
let input = vnode.elm.children[0]
|
input.addEventListener('compositionstart', () => {
|
vnode.inputLocking = true
|
})
|
input.addEventListener('compositionend', () => {
|
vnode.inputLocking = false
|
input.dispatchEvent(new Event('input'))
|
})
|
input.addEventListener('input', () => {
|
if (vnode.inputLocking) {
|
return
|
}
|
let oldValue = input.value
|
let newValue = input.value
|
let obj = input
|
let t = obj.value.charAt(0)
|
obj.value = obj.value
|
.replace('.', '$#$') //把第一个字符'.'替换成'$#$'
|
.replace(/\./g, '') //把其余的字符'.'替换为空
|
.replace('$#$', '.') //把字符'$#$'替换回原来的'.'
|
.replace(/[^\d.]/g, '') //只能输入数字和'.'
|
.replace(/^\./g, '') //不能以'.'开头
|
// .replace(/([0-9]+\.[0-9]{2})[0-9]*/, '$1') //只保留2位小数
|
obj.value = obj.value.replace(new RegExp(patternStr, 'g'), '$1$2.$3') //只保留2位小数
|
if (t == '-') {
|
obj.value = '-' + obj.value
|
}
|
// 判断是否需要更新,避免进⼊死循环
|
if (newValue !== oldValue) {
|
input.value = newValue
|
input.dispatchEvent(new Event('input')) // 通知v-model更新
|
}
|
})
|
// input 事件⽆法处理⼩数点后⾯全是零的情况因为⽆法确定⽤户输⼊的0是否真的应该清除,如3.02。放在blur中去处理
|
input.addEventListener('blur', () => {
|
let oldValue = input.value
|
let newValue = input.value
|
if (newValue) {
|
newValue = Number(newValue).toString()
|
}
|
// 判断是否需要更新,避免进⼊死循环
|
if (newValue !== oldValue) {
|
input.value = newValue
|
input.dispatchEvent(new Event('input')) // 通知v-model更新
|
}
|
})
|
}
|
}
|