6***@qq.com
6***@qq.com
  • 发布:2019-05-30 01:12
  • 更新:2022-08-02 13:51
  • 阅读:4927

【报Bug】app input设置number类型可以输入两个小数点;@input只是输入完成的监听,功能不够用,做一个输入金额超过两位小数禁止输入的功能实现不了

分类:uni-app

详细问题描述

(DCloud产品不会有明显的bug,所以你遇到的问题大都是在特定环境下才能重现的问题,请仔细描述你的环境和重现方式,否则DCloud很难排查解决你的问题)

[内容]

重现步骤

[步骤]

[结果]

[期望]

[如果语言难以表述清晰,拍一个视频或截图,有图有真相]

IDE运行环境说明

[HBuilder 或 HBuilderX。如果你用其他工具开发uni-app,也需要在此说明]

[IDE版本号]

[windows版本号]

[mac版本号]

uni-app运行环境说明

[运行端是h5或app或某个小程序?]

[运行端版本号]

[项目是cli创建的还是HBuilderX创建的?如果是cli创建的,请更新到最新版cli再试]

[编译模式是老模板模式还是新的自定义组件模式?]

App运行环境说明

[Android版本号]

[iOS版本号]

[手机型号]

[模拟器型号]

附件

[IDE问题请提供HBuilderX运行日志。菜单帮助-查看运行日志,点右键打开文件所在目录,将log文件压缩成zip包上传]

[App问题请提供可重现问题的代码片段,你补充的细一点,问题就解决的快一点]

[App安装包或H5地址]

[可重现代码片段]

联系方式

[QQ]

2019-05-30 01:12 负责人:无 分享
已邀请:
h***@126.com

h***@126.com

这是一个大坑。
如果大家不是必须,最好不要使用。
作者的问题,我也遇到了,想不到web平台一个很简单的功能在uni-app里完全是个大坑。
作者的意思是小数达到指定位数后,就不能再输入了,而不是输入之后再删除。
不知道为什么@进击的小猫咪 一直推荐那篇文章,没有任何意义啊。输入再删除,用户不同意啊。

要实现这个达到指定位数不再输入,就要监听keydown事件,但是uni-app是不支持监听软键盘的这个事件的,具体可以看文档。
另一种方法是类型指定为文本,通过判断光标位置及输入内容来动态改变长度,从面达到无法输入目的,但这样虽然实现了,但因为类型为文本,一些字母又无法避免了。所以这个办法没意义。

关于输入框的另一个大坑是,当类型为number或者digit,并指定了最大长度,输入数字,然后最后一位是小数点,且正好达到最大长度。比如最大长度是3,输入内容为"12." ,这是你再输入一个数字,整个input内容都被清空了。
我艹,这简直是不可原谅啊。

  • 3***@qq.com

    那你这个问题解决了吗?我也碰到了

    2022-09-15 15:59

s***@126.com

s***@126.com - 80后IT男

小程序中 比如 输入 0..

判断有两个小数点了 然后取消一个小数点
在nextTick 中更新 数据 是不行的
明细很慢 的变化, 而且 如果 输入足够快 ,还是能够输入多个小数点的

  • 5***@qq.com

    请问你解决了么?

    2020-10-23 20:26

l***@aliyun.com

l***@aliyun.com - web前端开发工程师

要有$nextTick才能改变输入框的值
this.$nextTick(() => {
this.money = money;
})

不是发哥

不是发哥

使用v-model直接设置为0.02

ZGH0709

ZGH0709

  1. type 为 number 类型的 input 测试不能输入两个小数点。你的 HBuilderX 版本是多少,我用的版本是 1.9.9.20190522, 尝试升级到最新版再进行测试。
  2. 对于超过两位小数的特殊情况,可以在 input 事件中对输入的数据进行截取,再填充至输入框即可。
  • 6***@qq.com (作者)

    input 事件中对输入的数据进行改变使用v-model不能改变输入框的值

    2019-05-30 11:27

  • 进击的小猫咪

    回复 6***@qq.com: 可以参考https://www.jianshu.com/p/143955de9486

    2021-01-07 11:30

  • 1***@163.com

    回复 进击的小猫咪: 没有任何参考意义,这个需求要达到小数点第三位输入的时候看不到第三位的值(类似于input设置了maxlength一样)的效果,你说的这个没有任何价值

    2021-02-01 18:20

  • x***@163.com

    HBuilderX 3.1.9 input number类型,可以输入多个小数点,+ - 都可以输入!!!

    2021-04-14 14:56

6***@qq.com

6***@qq.com (作者)

我用的是最新版的,v-model有bug 输入过程中的双向绑定失效 正则验证提现金额小数点后不能大于两位数字 输入第三位小数的时候删掉第三位并设置v-model的值 结果输入框的值并没有改变

ZGH0709

ZGH0709

正则表达式不对。在 3. , 3.2 , 3.22 等都会进入 false.

/^(\d)+(\.)?(\d){0,2}$/
  • 6***@qq.com (作者)

    正则没问题的 现在是v-model绑定的数据改变了输入框数据没变

    2019-05-30 12:44

  • 进击的小猫咪

    回复 6***@qq.com: 可以参考https://www.jianshu.com/p/143955de9486

    2021-01-07 11:30

ZGH0709

ZGH0709

正则可以通过 debug 检验一下你输入的时候,到底进的是 true 还是 false.
最好在 nextTick 中更新 数据, 因为输入速度是很快的,直接赋值不一定每次都更新。截取最好直接截取小数点后两位。
app 端是没有问题的,你用真机测试一下。

水手

水手 - 资深老开发

这个问题 就是 一个深坑。
你也不用反馈了, 他们根本就没能力解决。
每个平台都不一样,小程序可以就行了,app 为辅助了。

其实 实际数值 是正确的,就是input显示有问题

  • DCloud_uniCloud_WYQ

    @input事件返回值可以直接作为input的值,可以尝试不用v-model直接return一个值出来看下

    2019-11-05 10:27

h***@work.disubang.com

h***@work.disubang.com - 222222

设置v-modle值的时候加个延时1毫秒就可以了

1***@qq.com

1***@qq.com

请问这个问题解决了吗?v-modle改变不了输入框值

5***@qq.com

5***@qq.com

请问处理了么

该问题目前已经被锁定, 无法添加新回复