记一次Uniapp的input输入框type为number时还能输入非数字

起因

问题的出现是uniapp开发微信小程序后,表单填制人数,使用uniapp的input组件,并设置了type为number,然后测试突然提了bug说没有限制,我赶紧打开手机试了一下真机,弹出数字输入框,完全没问题啊;

随后找测试理论,结果她直接打开电脑微信,用电脑打开小程序,并输入了一串神秘代码,我顿时傻眼;

得出结论,只要非手机的环境,没法只弹出数字输入框,所以限制不住,我想的就是输入事件加上正则匹配替换呗;

js 复制代码
   <input
      class="forms-item-input"
      :value="formData.personNum"
      type="number"
      placeholder="请输入人数"
      @input="handlePersonNumInput"
      placeholder-style="color:#999;font-size:24rpx"
    />

   handlePersonNumInput(e) {
      const value = (e.detail.value || "").replace(/\D/g, "");

      this.$set
        ? this.$set(this.formData, "personNum", value)
        : (this.formData.personNum = value);
    }

想必长期混迹uniapp开发的小伙伴已经知道结果了,页面上看没有失效,在input中加上打印,this.formData.personNum打印出来居然是对的,纯数字;

那就是页面没更新呗,随后就开始了不断的尝试

js 复制代码
  handlePersonNumInput(e) {
      const value = (e.detail.value || "").replace(/\D/g, "");
      this.$set
        ? this.$set(this.formData, "personNum", value)
        : (this.formData.personNum = value);
      e.target.value = value
      e.detail.value = value
    }

还是不生效,这种情况就是代码数据更新了,但是视图不更新;

解决方法

各种搜索,各种问AI最后得到了真正的解决方法;

js 复制代码
    handlePersonNumInput(e) {
      const value = (e.detail.value || "").replace(/\D/g, "");

      this.$set
        ? this.$set(this.formData, "personNum", value)
        : (this.formData.personNum = value);
      return value
    }

不知道大家看到差异没有,就是在@input事件中,return出去最后的值,这样input框就会更新为这个值,不得不说真的太坑了

相关推荐
陈随易3 小时前
在 VSCode 里,把项目一键部署到服务器
前端·后端·程序员
Highcharts.js3 小时前
教程:基于 React + Highcharts 构建一个单页应用程序、按需数据拉取与图表渲染
开发语言·前端·数据结构·react.js·前端框架·highcharts·页面应用
To_OC3 小时前
我被 useState 坑了两次之后,终于把它的脾气摸透了
前端·javascript·react.js
鱼樱前端3 小时前
我用 Claude Code 后,编码效率翻 3 倍。但更值钱的是别的。
前端·后端·ai编程
_lucas4 小时前
给知识库网站接入AI问答
前端·ai编程·全栈
前端糕手5 小时前
前端面试题大全:JavaScript + Vue3 + React + TypeScript + 工程化 + 性能优化
前端
我不叫武6 小时前
一个用 Rust 写的离线编码查询桌面工具
前端
Web4Browser7 小时前
指纹浏览器 API 自动化怎么接:启动 Profile、获取 CDP 端点并连接自动化框架
前端·网络·typescript·自动化
Patrick_Wilson7 小时前
从 React 到 Flutter:写给前端的一张跨端知识地图
前端·flutter·react.js
颜酱7 小时前
06 | 把 meta_config 同步进 MySQL(生成阶段)
前端·人工智能·后端