整数输入
export const enterNumber = { bind: (el, binding) => { // 指令作用在 element-input 节点,对应原生 div.el-input (真实input节点的父节点) if (el.tagName.toLocaleUpperCase() !== 'INPUT') { el = el.getElementsByTagName('input')[0] } el.value = el.value.replace(/[^0-9]+/g, '') el.handlerInput = () => { if (el.inputLocking) return const oldValue = el.value const newValue = el.value.replace(/[^0-9]+/g, '') if (oldValue !== newValue) { el.value = newValue el.dispatchEvent(new Event('input')) } } el.handleCompositionStart = () => { el.inputLocking = true } el.handleCompositionEnd = () => { el.inputLocking = false el.dispatchEvent(new Event('input')) } el.addEventListener('input', el.handlerInput) el.addEventListener('compositionstart', el.handleCompositionStart) el.addEventListener('compositionend', el.handleCompositionEnd) }, unbind: (el, binding) => { // 指令作用在 element-input 节点,对应原生 div.el-input (真实input节点的父节点) if (el.tagName.toLocaleUpperCase() !== 'INPUT') { el = el.getElementsByTagName('input')[0] } el.removeEventListener('input', el.handlerInput) el.removeEventListener('input', el.handleCompositionStart) el.removeEventListener('input', el.handleCompositionEnd) }}
保留 2 位小数输入
export const enterDecimal = { bind: (el, binding) => { const replaceValue = val => { // https://www.jianshu.com/p/ef3743d865ca return val .replace(/[^\d.]/g, '') // 将非数字和点以外的字符替换成空 .replace(/^\./g, '') // 验证第一个字符是数字而不是点 .replace(/\.{2,}/g, '.') // 出现多个点时只保留第一个 .replace('.', '$#$') // 1、将数字的点替换成复杂字符$#$ .replace(/\./g, '') // 2、将字符串的点直接清掉 .replace('$#$', '.') // 3、将复杂字符再转换回点 .replace(/^(-)*(\d+)\.(\d\d).*$/, '$1$2.$3') // 只能输入两个小数 } // 指令作用在 element-input 节点,对应原生 div.el-input (真实input节点的父节点) if (el.tagName.toLocaleUpperCase() !== 'INPUT') { el = el.getElementsByTagName('input')[0] } el.value = replaceValue(el.value) el.handlerInput = () => { if (el.inputLocking) return const oldValue = el.value const newValue = replaceValue(el.value) if (oldValue !== newValue) { el.value = newValue el.dispatchEvent(new Event('input')) } } el.handleCompositionStart = () => { el.inputLocking = true } el.handleCompositionEnd = () => { el.inputLocking = false el.dispatchEvent(new Event('input')) } el.addEventListener('input', el.handlerInput) el.addEventListener('compositionstart', el.handleCompositionStart) el.addEventListener('compositionend', el.handleCompositionEnd) }, unbind: (el, binding) => { // 指令作用在 element-input 节点,对应原生 div.el-input (真实input节点的父节点) if (el.tagName.toLocaleUpperCase() !== 'INPUT') { el = el.getElementsByTagName('input')[0] } el.removeEventListener('input', el.handlerInput) el.removeEventListener('input', el.handleCompositionStart) el.removeEventListener('input', el.handleCompositionEnd) }}