uni-app uni-number-box 手动输入小数点光标定位异常
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
- 在输入框中输入数字
- 输入小数点
二、问题2
- 在输入框输入带小数位的数字
- 手动将光标定位到最后
- 点删除键
预期结果:
- 输入整数位后再输入小数点,不自动改变光标位置
- 删除小数位时,不自动将小数点删除,也不改变光标位置
实际结果:
- 输入整数位后再输入小数点,光标位置跑到数字最前面
- 删除小数位时,自动将小数点也删除了,光标位置跑到数字最前面
bug描述:
uni-number-box 手动输入小数点光标定位异常,具体如下
- uni-number-box组件,手动输入一个数字后,再输入小数点,光标从数字后定位到数字前,再输入一次小数点,框内出现了小数点,但位置在数字前
- 点键盘的删除键,会把小数点和小数点后的数字都删除了,并且光标定位到整数前面
你好,可以附一个视频吗,我看一下你那的效果。
再给一下你使用了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>
注意:
-
getCursorPosition
和setCursorPosition
方法是假设存在的方法,uni-number-box
组件本身可能不提供这些方法。如果uni-number-box
没有提供获取和设置光标位置的方法,你可能需要寻找其他方式来实现光标位置的调整,例如通过原生 DOM 操作(在 Web 平台)或使用uni-app
提供的 API(在 App 或小程序平台)。 -
上述代码是一个基本示例,你可能需要根据具体需求进行调整,特别是关于光标位置的处理逻辑。
-
考虑到跨平台兼容性,确保在 App、H5 和小程序等平台上进行充分的测试。