el-input-number 输入后删除,显示空白却有值(输入内容的首位数)

文章讲述了在使用ElementUI的el-input-number组件时,删除数字后值不为空的问题,分析可能的原因包括其他事件影响和版本问题,提供了解决方案,即利用onInput事件进行值的处理和在可编辑裂变场景下的onFocus配合使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题描述

使用<el-input-number v-model="numb"></<el-input-number>创建了一个数字组件。在输入框中输入完内容时,不失去焦点的清空下,再一个一个删除(Backspace),然后点击外边失去焦点;全部删除后,页面实现是空的,但是用其他事件调用numb的值时,发现不是空或0,而是输入内容的首位数;

即:输入了“4567”,然后一个个全删除了,显示空,调用时值却是“4”.

二、可能原因

1.其他的事件监听器或者格式化函数影响了el-input-number;
2.可能elementUI的低版本有此问题

三、解决方法

对于项目来说,升级版本不是随便决定的,所有我使用了“onInput”事件对值进行了处理。

<el-input-number v-model="numb" @input="onInput"></el-input-number>

onInput(value) {
    this.numb= value == '' ? null : parseInt(value, 0) || 0;
}

如果是可编辑裂变的情况,不要在“onInput”里传值,因为反向更新费劲,所以配合“onFocus”一起使用。

<el-input-number v-model="scope.row.numb" @focus="onFocus(scope.$index)" @input="onInputg"></el-input-number>


onFocus(_index) {
    this.tableIndex = _index;
},

onInput(value) {
    let number = value == '' ? null : parseInt(value, 0) || 0;
    this.tableData[this.tableIndex].numb= number;
},

### el-input 组件中 type 为 number 的大数输入被判空解决方案 当 `el-input` 组件设置为 `type="number"` 并且处理非常大的数时,可能会遇到浏览器自动将其转换成科学记数法的情况。这可能导致表单验证逻辑误认为该字段为空[^2]。 为了防止这种情况发生并确保能够正确接收和显示大整数,可以采取以下措施: #### 方法一:自定义格式化函数 通过监听 input 或 change 事件,在每次用户修改之后立即对其进行处理,从而阻止默认行为并将原始字符串作为新赋给控件。 ```javascript methods: { formatValue(event){ const target = event.target; // 移除任何非数字字符(除了开头的负号) let value = target.value.replace(/[^-\d]/g,''); // 如果有前导零则移除它们 while(value.startsWith('0') && value.length>1){ value=value.substring(1); } this.$nextTick(() => (target.value = value)); } } ``` 此方法适用于希望保留纯文本形式的大数而不触发内置约束的情况下使用。 #### 方法二:替换为 text 类型并手动控制 如果不需要利用 HTML5 提供的一些特性如上下箭头调整,则可以直接将类型更改为 "text" 同时保持只允许输入数字的规则。这样既避免了科学计数法的问题也简化了实现方式。 ```html <template> <el-input v-model.number.trim="value" :maxlength="lengthLimit"></el-input> </template> <script> export default { data() { return { lengthLimit: 20, value: '' }; }, }; </script> ``` 在此基础上还可以增加正则表达式的校验来进一步增强安全性与准确性。 #### 方法三:使用第三方库 big.js 来处理高精度计算需求场景下可能出现的数据溢出问题。 Big.js 是一个用于精确十进制运算的小巧 JavaScript 库,它可以帮助开发者轻松应对涉及大量位数或极高精度要求的操作。 ```javascript import Big from 'big.js'; // 将接收到的浮点数转为 Big 对象再做后续操作 const numAsBig = new Big(yourNumberHere); console.log(numAsBig.toString()); // 输出标准表示而非指数形式 ``` 以上三种策略可以根据具体的应用环境和个人偏好灵活选用,以达到最佳用户体验的同时保证数据完整性不受影响。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值