/**
* @author {LDM}
* @param {自定义指令名称} directiveName
* @param {处理函数} funcName
*/
function getDirective(directiveName, funcName) {
const selfDirective = Vue.directive(directiveName, {
bind: function(el, binding, vnode) {
el.addEventListener('compositionstart', onCompositionStart)
el.addEventListener('compositionend', onCompositionEnd)
if (el.nodeName === 'input' || el.nodeName === 'INPUT') {
el.addEventListener('keyup', function(e) {
if (e.target.composing) return
el.value = funcName(el.value, binding)
vnode && vnode.data && vnode.data.model && vnode.data.model.callback && vnode.data.model.callback(funcName(el.value, binding))
})
el.addEventListener('blur', function(e) {
if (e.target.composing) return
el.value = funcName(el.value, binding)
vnode && vnode.data && vnode.data.model && vnode.data.model.callback && vnode.data.model.callback(funcName(el.value, binding))
})
} else {
const item = vnode.child.$refs['input']
if (!item) return
item.addEventListener('keyup', function(e) {
if (e.target.composing) return
item.value = funcName(item.value, binding)
vnode && vnode.data && vnode.data.model && vnode.data.model.callback && vnode.data.model.callback(funcName(item.value, binding))
})
item.addEventListener('blur', function(e) {
if (e.target.composing) return
item.value = funcName(item.value, binding)
vnode && vnode.data && vnode.data.model && vnode.data.model.callback && vnode.data.model.callback(funcName(item.value, binding))
})
}
},
update: function(el, binding, vnode) {
if (vnode.child) {
const currentValue = funcName(vnode.data.model.value, binding)
vnode.child.currentValue = currentValue
vnode.data.model.callback(currentValue)
}
}
})
return selfDirective
}
const _letterNumberZH = (value, binding) => {
if (value) {
const reg = /[^0-9a-zA-Z\u4e00-\u9fa5]/g
const text = value.replace(reg, '')
if (binding && binding.value) {
return text.substr(0, binding.value)
}
return text
}
return value
}
// 字母数字中文 可配合 v-letterNumberZH="length" 限制输入长度 length 为长度,0 或者没有 则不限制输入长度
const letterNumberZH = getDirective('letterNumberZH', _letterNumberZH)