gpt4 book ai didi

javascript - 防止数字输入的 maxLength 不断改变最后一个数字的值?

转载 作者:行者123 更新时间:2023-11-30 20:45:28 27 4
gpt4 key购买 nike

我在 ReactJS 中有一个输入字段,如下所示:

  <input
type="number"
onKeyPress={handleKeyPress}
maxLength={3}
min="0"
max="999"
step=".1"
onPaste={handlePaste}
/>

以下是该输入的相关函数:

function handleKeyPress(e) {
if (e.target.value.length > e.target.maxLength) {
e.target.value = e.target.value.slice(0, e.target.maxLength);
}

const key = e.key;
if (!allowChars(key)) {
e.preventDefault();
}
}

function allowChars(charValue) {
const acceptedKeys = '0123456789';
return acceptedKeys.indexOf(charValue) > -1;
}

function handlePaste(event) {
event.preventDefault();
}

现在每次打到3个字,就可以连续打第4个字了。请参阅随附的 GIF 示例:

input number fail

关于如何防止这种情况的任何想法?我只希望输入字段最多有 3 个字符,所以第四个字符甚至不应该出现。

最佳答案

您的问题出在这段代码中:

 if (e.target.value.length > e.target.maxLength) {
e.target.value = e.target.value.slice(0, e.target.maxLength);
}

将其更改为:

if (e.target.value.length >= e.target.maxLength) {
e.target.value = e.target.value.slice(0, e.target.maxLength);
e.preventDefault();
return;
}

function handleKeyPress(e) {
if (e.target.value.length >= e.target.maxLength) {
e.target.value = e.target.value.slice(0, e.target.maxLength);
e.preventDefault();
return;
}

const key = e.key;
if (!allowChars(key)) {
e.preventDefault();
}
}

function allowChars(charValue) {
const acceptedKeys = '0123456789';
return acceptedKeys.indexOf(charValue) > -1;
}

function handlePaste(event) {
event.preventDefault();
}
<input
type="number"
onKeyPress="handleKeyPress(event)"
maxLength="3"
min="0"
max="999"
step=".1"
onPaste="handlePaste(event)"
/>

关于javascript - 防止数字输入的 maxLength 不断改变最后一个数字的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48753062/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com