input限制只能输入数字(中文输入法存在问题)

需求:
1、input只能输入数字输入其它置为空
2、伪代码如下

input(e) {
    let val = e.target.value;
    val = val.replace(/[^\d]+/g,'')
}

问题
1、当使用中文输入法时候,打出来的英文字母会显示到input框中(英文输入法无法输入字母);

猜测
1、用的keyup事件,有可能是keyup事件的问题

阅读 8.1k
5 个回答

number类型的输入框。样式用CSS改。

如果你指的是下图这种情况,IE下貌似可以设置CSS样式ime-mode解决,但是其他浏览器不支持,并且好像也没有什么解决
方式,虽然可以通过正则过滤内容,但是输入的时候还是会显示,type设置为number也没用。

clipboard.png

但是,你可以把input的类型改为password,在上面放一个DIV盖住input,然后把DIV的样式pointer-events属性设置为none,监听input改变,把value放到DIV里面,就可以了

//只能输入数字
        function clearNoNum(obj) {
            //先把非数字的都替换掉,除了数字和.
            obj.value = obj.value.replace(/[^\d.]/g, "");
            //必须保证第一个为数字而不是.
            obj.value = obj.value.replace(/^\./g, "");
            //保证只有出现一个.而没有多个.
            obj.value = obj.value.replace(/\.{2,}/g, ".");
            //保证.只出现一次,而不能出现两次以上
            obj.value = obj.value.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
        }

改用input事件没问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题