话不多说,直接上代码。
实时监听数字输入框
/**
* ele: input 元素
* fun: 输入回调
**/
initNumberInput: function (ele, fun) {
// 是否锁定当前的输入状态
let isLock = false;
let oldVal = '';
// 输入即可触发【不区分中文和英文】
ele.get(0).addEventListener('keydown', function (e) {
// 只有在非中文输入状态的时候,才能更改数字
oldVal = this.value;
if(!isLock && (/\d/g.test(e.key) || e.key === 'Backspace')) {
return fun && fun(this.value);
} else {
e.preventDefault();
}
});
// 中文输入开始的时候,会触发此函数
ele.get(0).addEventListener('compositionstart', function () {
isLock = true;
});
// 中文输入结束的时候,会触发此方法
ele.get(0).addEventListener('compositionend', function (e) {
e.preventDefault();
isLock = false;
let val = '';
if(!isNaN(this.value * 1)) {
if (/\./.test(this.value)) {
val = Math.floor(this.value)
} else {
val = this.value;
}
} else if(!isNaN(oldVal * 1)) {
val = oldVal;
}
fun && fun(val);
});
},
参考于:传送门
还不完善,目前够用