我正在尝试构建一个在keydown上用破折号更新的电话输入,当用户输入一封信时,我试图使用var isNumber = validateNumber(event);
if (isNumber) {
if (inputLength == 3) {
this.value = this.value + '-';
} else if (inputLength == 7) {
this.value = this.value + '-';
}
} else {
var newValue = this.value.slice(0, -1);
this.value = newValue;
}
立即删除该字符条目,但这会删除最后一个号码。有人能够解释这是怎么回事吗?
JS
{{1}}
答案 0 :(得分:2)
我想这都是因为您使用的事件类型。在实际更改发生之前调度'Keydown'。因此,当检测到错误的字符时,您可以尝试使用event.preventDefault();
。
答案 1 :(得分:0)
我对您的jsfiddle进行了两处更改,以使代码按预期运行:
keyup
事件。我认为你的第一个问题是,当你的代码执行时,这封信还没有附加到value
。您使用slice
函数的错误参数。请考虑以下两个选项:
this.value.slice(0, this.value.length-1)
this.value.slice(0, -1)
第二个选项将使用除最后一个字符之外的所有字符串(value
)。这就是-1
索引的运作方式。
这是更新后的功能:
telInput.addEventListener('keyup', function (event) {
var inputValue = this.value,
inputLength = inputValue.length;
var val = validateNumber(event);
if (val) {
if (inputLength == 3) {
this.value = this.value + '-';
} else if (inputLength == 7) {
this.value = this.value + '-';
}
} else {
var newValue = this.value.slice(0, this.value.length-1);
this.value = newValue;
}
});