我目前正在尝试输入,将接受十进制数,并将自动格式与千个分隔符在同一时间。
但是,我唯一能做的自动格式化千位分隔符是设置input type='text',我不能输入小数。Where as setting type=' number‘允许我输入十进制数,但它不会使用千位分隔符自动格式化
代码如下:
<input
className="cal__section__form__container--input"
placeholder={0}
type="text"
value={displayVal || ""}
onChange={(e) => {
const targ = e.target.value.replace(/\D/g, "") || 0;
const displayVal = parseFloat(targ).toLocaleString(undefined, {
maximumFractionDigits: 2,
});
console.log(displayVal);
}}/>
发布于 2021-10-21 23:55:12
你永远不会更新你的displayVal状态。在onChange之外处理事件逻辑也是一种很好的做法。下面是你的代码应该是什么样子:
const handleChange = (e) => {
const value = e.target.value;
const clean = value.replace(/,/g, "");
const regex = /^[0-9]*\.?[0-9]*$/;
if (value && clean.match(regex)) {
if (!value.includes(".")) {
const formatted = new Intl.NumberFormat().format(parseFloat(clean));
setDisplayVal(formatted);
} else {
setDisplayVal(value);
}
} else {
setDisplayVal("");
}
};
<input
className="cal__section__form__container--input"
placeholder={0}
type="text"
value={displayVal}
onChange={handleChange}
/>https://stackoverflow.com/questions/69669907
复制相似问题