我需要处理基本用户来处理大多数边缘情况。
我有一个输入,输入后将解析该值。
现在,当用户在输入开始时移动光标并添加一些字符时,我遇到了一些问题。
我想达到的目标是:
1.确定输入发生在现有值之前还是之后
1.基于此剥离字符:如果在前面,则去掉下一个字符,否则去掉第一个字符
代码可能如下所示:
const myInput = document.querySelector("[my-input]");
const myInputMaxlen = 2;
myInput.addEventListener("input", () => {
const val = myInput.value;
const wasBefore = val.selectionStart < val.length;
if (val.length > myInputMaxlen) {
myInput.value = wasBefore
? myInput.value.slice(0, myInputMaxlen - 1)
: myInput.value.slice(1)
}
});
<input my-input type="text" maxlength="3" value="" />
目标是假设输入的maxLength为2,具有输入字符和一个现有字符
2条答案
按热度按时间owfi6suc1#
这听起来像是您在尝试处理边缘情况,即用户可以在已经具有某个预先存在的值的输入字段中输入字符,并且您希望确保输入值不超过特定长度。
您提供的代码似乎是实现这一目标的良好起点。但是,您可能需要考虑以下几点:
这个.selectionStart应该是myInput.selectionStart。你需要通过变量名引用输入元素,而不是这个。
通过检查selectionStart是否小于或等于预先存在的值的长度,可以简化wasBefore检查。
下面是代码的更新版本:
在这个更新的版本中,我们使用myInput.selectionStart来确定光标是在预先存在的值之前还是之后。如果是之前,wasBefore为true,则我们去掉下一个字符。否则,我们去掉第一个字符。
此外,我们使用myInputMaxlen代替硬编码值“2”,以防您以后想要更改最大长度。
e5nqia272#
好的,基本上我写的代码已经很好了。我在编辑字符串后添加了一些逻辑来处理插入符号的位置,使输入更直接。
谢谢Mudasir的建议。
下面是通用Javascript的最终代码:
这是我正在做的Angular 版本: