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

解决uniapp H5页面限制输入框只能输数字问题

工作记录

最最近在做 uniapp 开发的移动端 H5 页面,有个需求是金额输入框只能输入数字,不能输入小数点和其他字符,经过各种尝试,发现其他字符可以通过正则过滤掉,但是输入小数点的话,因为没有触发 @input 和 watch 事件,导致没法过滤掉,最后只能通过自定义键盘的形式解决,详细代码如下:

<template>
  <view>
    <view class="container" @click="hideKeyboardFunc">
      <view class="flex" @click.stop="showKeyboard('num')">
        <view :style="num?'width: 100%;color':'width: 100%;color:#aeb3bb'">{{num||'请输入金额'}}</view>
        <span>元</span>
      </view>
    </view>
    <!-- 自定义键盘 -->
    <view class="keyboard" v-show="keyboard">
      <button v-for="(item, index) in 9" :key="index" @click.stop="key(index + 1)">
        <text>{{ index + 1 }}</text>
      </button>
      <button @click="hideKeyboardFunc" class="hide" style="font-size:20px">关闭</button>
      <button @click.stop="key(0)">
        <text>0</text>
      </button>
      <button @click.stop="del()">
        <text style="font-size:20px">删除</text>
      </button>
    </view>
  </view>
</template>
<script>
export default {
  data() {
    return {
      num:'', // 金额字段
      currentKey:'', // 当前点击的输入框的字段名,适用于输入框有多的的情况
      keyboard:false
    };
  },
  methods: {
    // 吊起键盘
    showKeyboard(key){
      this.keyboard = true
      this.currentKey = key
    },
    // 拼接输入的内容
    key(key) {
      this[this.currentKey] += key+''
    },
    // 删除输入框中的内容
    del() {
      const str = this[this.currentKey]+''
      if (str.length > 0) {
        this[this.currentKey] = str.substring(0, str.length - 1)
      }
    },
    // 隐藏键盘
    hideKeyboardFunc(){
      this.keyboard=false
    }
  },
};
</script>

<style lang="scss">
.container{
  width: 100%;
  height: 100vh;
  padding: 15px;
  background-color: #ffffff;
}
.flex{
  display: flex;
  padding: 15px;
  border: 1px solid #ccc;
}
.keyboard {
  position: fixed;
  bottom: 0;
  width: 100%;
  background: #EEEEEE;
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  z-index: 999;
  button {
    display: flex;
    align-items: center;
    justify-content: center;
    width: calc(100vw / 3 - 1rpx);
    background: #FFFFFF;
    border-radius: 0;
    margin-top: 1rpx;
    font-size: 50rpx;
    height: 120rpx;
    &.button-hover:not(.hide) {
      background: #EEEEEE;
    }
    image {
      width: 52rpx;
      height: 38rpx;
    }
  }
}
</style>

效果如图:

 


http://www.kler.cn/a/461733.html

相关文章:

  • 今日头条ip属地根据什么显示?不准确怎么办
  • 掌握 Dockerfile:格式、解析器指令、环境变量替换
  • node.js内置模块之---fs 模块
  • 【ArcGIS Pro二次开发实例教程】(1):图层的前置、后置
  • redis源码系列--(四)--redis cluster
  • 【调试记录】在CARLA中插入可以播放视频的组件
  • protobuf: 通讯录2.1
  • 生成文本格式日历的Python程序
  • SwanLab x LLaMA Factory:国产开源AI训练工具组合拳(含教程)
  • 如何使用Python生成词云图:结合`wordcloud`、`imageio`、`collections`和`jieba`分词模块
  • Excel VBA 自动填充空白并合并相同值的解决方案
  • 1.计算机英语
  • Spring boot对接安全证书
  • 通过 4 种方法将数据从 OnePlus 传输到Android
  • JavaScript中的JSON是什么
  • 【我的 PWN 学习手札】IO_FILE 之 劫持vtable
  • 24.01.01 MyBatis
  • 1.梳理一下neo4j的安装的过程以及错误
  • 9.若依-自定义表单构建
  • MarkDown怎么转pdf;Mark Text怎么使用;
  • sublime text for mac 如何在一行末尾添加内容或符号
  • 用uniapp写一个播放视频首页页面代码
  • FFmpeg(音视频处理的瑞士军刀)开发实战指南
  • 论文笔记:DepthLab: From Partial to Complete
  • [excel] VLOOKUP
  • RapidSSL 证书