当文本由Javascript格式化时,最终光标位置似乎不完全可预测。
我可以遵循的规则是否可以预测光标的最终位置?
以下示例是简化的电话号码格式脚本。 e.target.value
用于获取keyup
之后的值。然后将该值格式化为电话号码,并使用e.target.value
将其推回到文档中。超级简单。
'use strict';
document.getElementsByClassName('input_style')[0].addEventListener('keyup', releaseKey);
function releaseKey(e) {
let phoneValue, phoneLength;
phoneValue = e.target.value.replace(/\D+/g, '');
phoneLength = phoneValue.length;
if (phoneLength < 3) {
e.target.value = phoneValue;
} else if (phoneLength < 6 ) {
e.target.value = '(' +phoneValue.substring(0, 3) +') ' +phoneValue.substring(3);
} else {
phoneValue = phoneValue.substring(0, 10);
e.target.value = '(' +phoneValue.substring(0, 3) +') ' +phoneValue.substring(3, 6) +'-' +phoneValue.substring(6, 10);
}
}
.input_style {
flex: 1 0 auto;
font-size: 2rem;
font-family: arial;
}
<input class="input_style" placeholder="(555) 555-5555">
keyup
和函数迭代之后,光标按预期移动到电话号码的末尾。 keyup
和函数迭代之后,为什么光标不像以前那样移动到结束线?这不一定是因为你没有输入一个完整的10位数,因为如果你用3位数字进行测试,就会像之前一样将光标发送到结尾。e.target.value
并替换每个函数迭代。有时光标移动到行尾,有时它会停留在中间。这种行为有规则吗?非常感谢!