uni-app input type="number" 输入负数-1111,按退格键删减到-1时继续点击退格键无法清空数字,输入其他负数都是如此

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

uni-app input type=“number” 输入负数-1111,按退格键删减到-1时继续点击退格键无法清空数字,输入其他负数都是如此

示例代码:

<template>  
  <view>  
    {{ val }}  
    <!-- val 示例:val为-1时,点击退格键,input事件没执行,val仍为-1 -->
    <input type="number" :value="val" @input="val = $event.detail.value" />  
  </view>  
</template>  
<script lang="ts" setup>  
import { ref } from 'vue';  

const val = ref();  

</script>

操作步骤:

直接使用input type=“number” 当输入负数时,删除最后一位数字时,不在执行input事件

预期结果:

input type=“number” 输入负数-1111,按退格键删减到-1时,继续点击退格键可以正常清空

实际结果:

input type=“number” 输入负数-1111,按退格键删减到-1时,继续点击退格键无法清空数字,输入其他负数都是如此

bug描述:

input type=“number” 输入负数-1111,按退格键删减到-1时,继续点击退格键无法清空数字,输入其他负数都是如此


3 回复

刚试过倒是没发现,可以发个复现的demo


代码示例贴上了,找个vue3 uniapp项目用以上代码就可以复现问题

uni-app 中使用 input 组件并设置 type="number" 时,确实会遇到你描述的问题:当输入负数(如 -1111)并逐步删除到 -1 时,继续点击退格键无法清空输入框中的数字。这是因为 input 组件的 type="number" 在处理负数时存在一些限制。

问题原因

input 组件的 type="number" 在处理负数时,会将 - 符号视为数字的一部分。当输入框中的内容为 -1 时,继续删除 1 后,- 符号仍然保留,导致输入框无法被清空。

解决方案

有几种方法可以解决这个问题:

1. 使用 type="text" 并手动验证输入

inputtype 设置为 text,然后通过正则表达式或其他方式手动验证输入内容是否为数字。

<template>
  <input type="text" v-model="inputValue" [@input](/user/input)="handleInput" />
</template>

<script>
export default {
  data() {
    return {
      inputValue: ''
    };
  },
  methods: {
    handleInput(event) {
      const value = event.target.value;
      // 使用正则表达式验证输入是否为数字(包括负数)
      if (/^-?\d*$/.test(value)) {
        this.inputValue = value;
      } else {
        // 如果输入不合法,可以清空输入框或给出提示
        this.inputValue = '';
      }
    }
  }
};
</script>

2. 使用 type="number" 并手动处理 - 符号

继续使用 type="number",但在删除到 -1 时,手动清空输入框。

<template>
  <input type="number" v-model="inputValue" [@input](/user/input)="handleInput" />
</template>

<script>
export default {
  data() {
    return {
      inputValue: ''
    };
  },
  methods: {
    handleInput(event) {
      const value = event.target.value;
      if (value === '-') {
        this.inputValue = '';
      }
    }
  }
};
</script>

3. 使用 input 事件监听并处理

input 事件中监听输入内容,当内容为 - 时,手动清空输入框。

<template>
  <input type="number" v-model="inputValue" [@input](/user/input)="handleInput" />
</template>

<script>
export default {
  data() {
    return {
      inputValue: ''
    };
  },
  methods: {
    handleInput(event) {
      const value = event.target.value;
      if (value === '-') {
        this.inputValue = '';
      }
    }
  }
};
</script>
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!