当前位置: 首页 > news >正文

uniapp,uview:inputnumber或者input,当type为number的时候,在ios里输入不了小数的问题

项目场景:

在做uniapp的H5页面时,有个需求是要输入框要能支持可以保留两位小数输入,不能输入负数和其他字符。心想这简单,直接用uview的inputnumber组件这不就好了,结果测试提bug说不能输入小数点,我心想我的发,自己的不是可以吗,结果去试了一下,确实不能输入。ios里只能弹出自带的数字键盘,而且还是没有小数点的`

于是按照惯例,百度开发工程师开始了,开始百度搜索问题:搜到是说type不能为number,把number设置成digit就好了,官方图如下

在这里插入图片描述

嗯哼,改了之后,自己手机试了一下。不错,有效果,可以切换到其他输入法了,信心满满的把bug给点解决了,后来测试小姐姐又说这不行啊,我说怎么可能,为啥我滴可以,我看了之后确实不行,本地偶尔行。测试环境却不行

原因分析:

找了很久,发现其实就是ios没有对用户场景做比较全面的支持。于是一不做二不休,干脆自己做个组件算了,使用type=text,这下总不会限制键盘的方式了吧?


解决方案:

直接自己做一个组件,type=text,做个样式和uview的inputnumber组件一样的,vue代码如下

组件:

<template><view class="container"><button @click="decrement" :disabled="isDisabled" class="btn no-space">-</button><input v-model="number" @input="handleInput" class="input" type="digit" step="0.01" /><button @click="increment" class="btn">+</button></view>
</template><script>
export default {props: {value: {type: Number,default: 1,},},data() {return {number: this.value,isDisabled: this.value === 0,};},watch: {number(newVal) {// 当 number 发生变化时,手动触发 v-model 绑定的更新this.$emit("input", newVal);}},methods: {handleInput(event) {// 获取用户输入的值let inputValue = event.target.value;// 移除非数字和小数点(禁止负数)let cleanedInputValue = inputValue.replace(/[^0-9.]/g, '');// 检查小数点的数量,保留一个小数点const parts = cleanedInputValue.split('.');// 限制整数部分最多五位数if (parts[0].length > 5) {parts[0] = parts[0].substring(0, 5);}// 限制小数部分最多两位数if (parts.length > 1 && parts[1].length > 2) {parts[1] = parts[1].substring(0, 2);}// 重新组合整数部分和小数部分cleanedInputValue = parts.join('.');// 将 cleanedInputValue 转换为浮点数const numberValue = parseFloat(cleanedInputValue);const formattedNumberValue = isNaN(numberValue) ? 0 : parseFloat(numberValue.toFixed(2));// 更新组件数据this.number = formattedNumberValue;this.$emit("change", this.number);},canIncrement() {return this.number < 99999;},canDecrement() {return this.number > 0;},increment() {if (this.canIncrement()) {this.number = parseFloat(this.number || 0) + 0.01;this.number = parseFloat(this.number.toFixed(2));this.$emit("input", this.number);}},decrement() {if (this.canDecrement()) {this.number = parseFloat(this.number - 0.01).toFixed(2);this.$emit("input", this.number);}},handleChange(e) {this.$emit("change", { value: this.number || 0, index: '' });this.isDisabled = parseFloat(e.target.value) === 0;},},
};
</script><style lang="scss" scoped>
.no-space {letter-spacing: 0;
}uni-button:after {border: none !important;
}.container {display: flex;align-items: center;justify-content: space-between;width: 100%;
}.btn {width: 60rpx;display: flex;flex-direction: row;justify-content: center;align-items: center;border-radius: 8rpx 0 0 8rpx;background: rgb(242, 243, 245);height: 60rpx;color: rgb(50, 50, 51);
}.btn2 {font-weight: bold;font-size: 32rpx;
}.input {position: relative;text-align: center;padding: 0;margin: 0 3px;display: flex;flex-direction: row;align-items: center;justify-content: center;color: rgb(50, 50, 51);font-size: 14px;background: rgb(242, 243, 245);height: 28px;width: 42px;
}
</style>

使用方式:

<input-number v-model="list.time" @change="valChange"></input-number>

欧克欧克,完美解决问题。测试小姐姐说我不仅人长得帅,该bug也快

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 歌曲转换成mp3格式免费秘籍,安利6款音频转换软件(简单实用)
  • JVM 性能分析 —— CMS 老年代并发 GC 触发条件与压缩式 GC (升级为 Full GC)触发条件
  • 数据库命令与语句
  • 深度学习入门-10
  • 金融知识普及月答题活动
  • Spring 源码解读:实现Bean的初始化与销毁机制
  • node.js使用express框架实现api接口开发(从零开始,超简单可直接复制)
  • MMGPL: 基于图提示学习的多模态医学数据分析 文献速递-大模型与多模态诊断阿尔茨海默症与帕金森疾病应用
  • 数字化转型升级探索(三)
  • C语言 ——— 文件指针以及文件的相关操作
  • QT C++ 判断字符串是否是一个数字
  • ‌U盘闪一下就没了?‌如何有效恢复数据
  • 在手机在线预览3D模型,是如何实现的?
  • 【STM32】写Keil程序的注意事项
  • JSON数据格式介绍及如何在java中解析、转换、使用(fastjson工具类和hutools工具类使用教程)
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 【347天】每日项目总结系列085(2018.01.18)
  • const let
  • Netty 4.1 源代码学习:线程模型
  • SpringBoot几种定时任务的实现方式
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 学习使用ExpressJS 4.0中的新Router
  • 主流的CSS水平和垂直居中技术大全
  • raise 与 raise ... from 的区别
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (a /b)*c的值
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (php伪随机数生成)[GWCTF 2019]枯燥的抽奖
  • (solr系列:一)使用tomcat部署solr服务
  • (八)c52学习之旅-中断实验
  • (二)丶RabbitMQ的六大核心
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (五)IO流之ByteArrayInput/OutputStream
  • (转)Scala的“=”符号简介
  • (转)人的集合论——移山之道
  • .axf 转化 .bin文件 的方法
  • .net Application的目录
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET 某和OA办公系统全局绕过漏洞分析
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NET正则基础之——正则委托
  • .sys文件乱码_python vscode输出乱码
  • @requestBody写与不写的情况
  • @Transaction注解失效的几种场景(附有示例代码)