我在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:
关于如何防止这种情况的任何想法?我只想让输入字段最多包含3个字符,因此第4个字符甚至不应显示出来。
答案 0 :(得分:1)
您的问题出现在以下代码片段中:
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)"
/>