uni-app中uni-easyinput type='digit' 小数点输入时出现问题

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app中uni-easyinput type=‘digit’ 小数点输入时出现问题

开发环境 版本号 项目创建方式
Windows windows11 24H2 CLI
HBuilderX 4.24
Chrome 127.0.6533.120
CLI 3.0.0-4010520240507001

操作步骤:

  • 连续两个uni-easyinput输入框,type均为digit,使用过程中都有光标位置不准确,小数点无法使用

预期结果:

  • 正常输入小数

实际结果:

  • 输入整数后点击小数点,光标移到输入框最前方,再次点击小数点,光标移到输入框最后方,再次点击小数点无反应,再输入整数,再次点击小数点才能正常使用

bug描述:

  • 输入整数后点击小数点,光标移到输入框最前方,再次点击小数点,光标移到输入框最后方,再次点击小数点无反应,再输入整数,再次点击小数点才能正常使用

4 回复

你好,你这应该是触发了保护机制,请你按照正常的操作方式输入


就是正常输入的啊,小键盘输入都试过了,一样的效果

光标是自动前后移动的,没法正常输入小数点

在uni-app中使用uni-easyinput组件并设置type='digit'时,确实可能会遇到小数点输入相关的问题。这通常是由于uni-easyinput组件在处理数字输入时的默认行为导致的。默认情况下,type='digit'可能会限制用户只能输入整数,而禁止输入小数点及其后的数字。

为了解决这个问题,我们可以通过自定义键盘事件来处理小数点的输入。下面是一个示例代码,展示了如何在uni-app中实现允许小数点输入的uni-easyinput组件:

<template>
  <view>
    <uni-easyinput
      v-model="inputValue"
      placeholder="请输入数字"
      @input="handleInput"
      :clearable="true"
    />
  </view>
</template>

<script>
export default {
  data() {
    return {
      inputValue: ''
    };
  },
  methods: {
    handleInput(event) {
      const value = event.detail.value;
      // 正则表达式,允许整数和小数(最多两位小数)
      const regex = /^(?:\d+|\d+\.\d{1,2})$/;
      
      if (regex.test(value)) {
        this.inputValue = value;
      } else {
        // 如果输入的值不符合正则表达式,则恢复为上一个有效值
        this.$emit('input', this.inputValue); // 手动触发input事件,以便父组件能够获取到有效值(可选)
        uni.showToast({
          title: '请输入有效的数字',
          icon: 'none'
        });
      }
    }
  }
};
</script>

<style>
/* 添加一些样式,以便更好地展示组件 */
uni-easyinput {
  width: 100%;
  padding: 10px;
  margin-top: 20px;
  box-sizing: border-box;
}
</style>

在这个示例中,我们通过监听uni-easyinputinput事件来捕获用户的输入。然后,我们使用正则表达式来验证输入的值是否为有效的数字(包括整数和小数,且小数部分最多两位)。如果输入的值符合正则表达式,则更新inputValue;如果不符合,则显示一个提示信息,并保持inputValue为上一个有效值。

这种方法可以灵活地处理小数点输入的问题,并且可以根据需要调整正则表达式的规则,以允许不同格式的数字输入。例如,如果你希望允许更多位的小数,只需调整正则表达式中的{1,2}部分即可。

回到顶部