uni-app uni-number-box 手动输入小数点光标定位异常

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

uni-app uni-number-box 手动输入小数点光标定位异常

项目 信息
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 win10
HBuilderX类型 正式
HBuilderX版本号 4.15
手机系统 HarmonyOS NEXT
手机系统版本号 HarmonyOS NEXT Developer Beta2
手机厂商 华为
手机机型 P50
页面类型 vue
vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

一、问题1

  1. 在输入框中输入数字
  2. 输入小数点

二、问题2

  1. 在输入框输入带小数位的数字
  2. 手动将光标定位到最后
  3. 点删除键

预期结果:

  1. 输入整数位后再输入小数点,不自动改变光标位置
  2. 删除小数位时,不自动将小数点删除,也不改变光标位置

实际结果:

  1. 输入整数位后再输入小数点,光标位置跑到数字最前面
  2. 删除小数位时,自动将小数点也删除了,光标位置跑到数字最前面

bug描述:

uni-number-box 手动输入小数点光标定位异常,具体如下

  1. uni-number-box组件,手动输入一个数字后,再输入小数点,光标从数字后定位到数字前,再输入一次小数点,框内出现了小数点,但位置在数字前
  2. 点键盘的删除键,会把小数点和小数点后的数字都删除了,并且光标定位到整数前面

数字输入框bug.zip


9 回复

你好,可以附一个视频吗,我看一下你那的效果。
再给一下你使用了uni-number-box 的相关代码


您好,我在附件上传了操作录屏和代码

回复 g***@163.com: 你代码里面的parseFloat(currentNJ.rowSoacing)的值是啥

回复 DCloud_UNI_yuhe: 你是哪家平台出现这个问题的?

回复 DCloud_UNI_yuhe: 就是绑定的一个变量值

回复 DCloud_UNI_yuhe: 您指的是什么平台?

回复 g***@163.com: 我这里没有复现,你是鸿蒙next上出现的吗?

回复 DCloud_UNI_yuhe: 不管是安卓还是鸿蒙还是h5都出现了,我更新了HbuilderX版本至4.24,就解决了,感谢您的解答

uni-app 中使用 uni-number-box 组件时,如果遇到手动输入小数点后光标定位异常的问题,通常是由于组件内部对输入值的处理逻辑不够完善导致的。我们可以通过自定义输入事件处理逻辑来修复这个问题。

以下是一个可能的解决方案,通过监听 input 事件,手动处理小数点输入的情况,并调整光标位置。请注意,这个解决方案假设你已经安装了 uni-app 并且正在使用 uni-number-box 组件。

首先,确保你的页面或组件中引入了 uni-number-box 组件:

<template>
  <view>
    <uni-number-box
      v-model="number"
      @input="handleInput"
      :decimal-places="2" <!-- 根据需要设置小数位数 -->
    />
  </view>
</template>

<script>
export default {
  data() {
    return {
      number: ''
    };
  },
  methods: {
    handleInput(event) {
      const inputValue = event.detail.value;
      const decimalPointIndex = inputValue.indexOf('.');
      const lastInputChar = inputValue[inputValue.length - 1];
      
      // 如果最后一个字符是小数点且之前没有小数点,则允许输入
      if (lastInputChar === '.' && decimalPointIndex === inputValue.length - 1) {
        this.number = inputValue;
        return;
      }

      // 修正光标位置(这里仅简单处理,根据实际需求可能需要更复杂的逻辑)
      let cursorPosition = this.$refs.numberBox.getCursorPosition(); // 假设有获取光标位置的方法
      if (decimalPointIndex !== -1 && lastInputChar !== '.' && cursorPosition > decimalPointIndex) {
        cursorPosition++; // 小数点后输入数字时,光标后移一位
      }

      // 更新值和光标位置(这里需要自行实现设置光标位置的方法)
      this.number = inputValue;
      // this.$refs.numberBox.setCursorPosition(cursorPosition); // 假设有设置光标位置的方法
    }
  }
};
</script>

注意

  1. getCursorPositionsetCursorPosition 方法是假设存在的方法,uni-number-box 组件本身可能不提供这些方法。如果 uni-number-box 没有提供获取和设置光标位置的方法,你可能需要寻找其他方式来实现光标位置的调整,例如通过原生 DOM 操作(在 Web 平台)或使用 uni-app 提供的 API(在 App 或小程序平台)。

  2. 上述代码是一个基本示例,你可能需要根据具体需求进行调整,特别是关于光标位置的处理逻辑。

  3. 考虑到跨平台兼容性,确保在 App、H5 和小程序等平台上进行充分的测试。

回到顶部