javascript - 当onchange处理程序使用javascript检测长度为4时如何在状态文本框中自动添加连字符
问题描述
我有模块,我需要将文本框的值格式化为 xxxx-xxxxxxx。现在我已经通过使用e.target.value.length
我的目标来检测我的文本框的长度是当处理程序检测到 4 的长度时,连字符将在文本框的第三个长度值之后自动加入。前任。xxxx-我目前使用反应 js。
问题:连字符插入 4 长度。
目标: xxxx-xxxxxxx。
这是我的处理程序:
handleChange = (e) => {
let val = e.target.id ? e.target.id : e.target.name
var value = { [val]: e.target.value };
if(val == 'mobile_number') {
if(e.target.value.length === 4) {
value = this.state.formData.mobile_number += "-"
}
}
this.setState((prevState) => ({
formData: {
...prevState.formData,
...value,
},
}));
};
这是我的 mobile_number 文本框:
<input
type="text"
className="form-control r-5"
id="mobile_number"
value={mobile_number || ''}
required
onChange={this.handleChange}
maxLength='12'
/>
我的工作:
解决方案
您需要使用 value fromevent.target
而不是使用您的状态,同时附加连字符。那是因为您的状态具有通过事件从处理程序到达的“未更新”值。
反而
if(e.target.value.length === 4) {
value = this.state.formData.mobile_number += "-"
}
您应该执行类似的操作,以在添加输入和删除输入时支持这两种情况:
let value;
if (
event.target.value.length === 5 &&
event.target.value.includes("-")
) {
value = event.target.value.replace("-", "");
}
if (event.target.value.length === 4) {
value = event.target.value + "-";
}
}}
编辑:链接到沙盒 - > https://codesandbox.io/s/add-hyphen-after-4-input-pxohf?file=/src/App.js
推荐阅读
- javascript - React 似乎跳过了 for 循环
- mongodb - $limit 和 $project 用于逻辑计算
- sql - 查找表中所有数值变量的均值、标准差、百分位数
- c# - aspnetcore:如何基于 URI 以编程方式调用另一个控制器?
- dll - Ada 库 GPR 项目:为什么 gprinstall 不起作用?
- scala - 在scala中递归到尾递归
- c# - hbox/vbox 和 monodeleop 中的单元格/项目数
- c++ - 矢量:清除它与删除它
- .net-core - 将数据迁移到 Service Fabric 有状态服务
- xamarin - 由字符串组成的 ObservableCollection 不更新