Javascript 删除键盘上输入的字母会删除数字吗?

Javascript 删除键盘上输入的字母会删除数字吗?,javascript,Javascript,我试图构建一个电话输入,当用户输入一个字母时,我试图使用this.value.slice(0,-1)立即删除该字符输入,但这会删除最后一个数字。有人能解释这是怎么发生的吗 JS var isNumber = validateNumber(event); if (isNumber) { if (inputLength == 3) { this.value = this.value + '-'; } else if (inputLen

我试图构建一个电话输入,当用户输入一个字母时,我试图使用
this.value.slice(0,-1)
立即删除该字符输入,但这会删除最后一个数字。有人能解释这是怎么发生的吗

JS

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;
    }

Fiddle:

我想这都是因为您使用的事件类型。”在实际更改发生之前发送“Keydown”。因此,您可以尝试使用
event.preventDefault()当检测到错误字符时正确。

我对您的JSFIDLE做了两个更改,以使代码按预期运行:

  • 切换到
    keyup
    事件。我认为您的第一个问题是,当您的代码执行时,还没有将字母附加到
    value
  • 您对
    slice
    函数使用了错误的参数。考虑这两个选项:

  • this.value.slice(0,this.value.length-1)

  • this.value.slice(0,-1)
第二个选项将获取除最后一个字符以外的所有字符串(
)。这就是
-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;
    }
});

记住,你正在努力完成的事情是非常困难的。如果我把我贴上去呢。文本?你的事件甚至不会触发。我习惯于做面具。恐怕这件事必须是直截了当的。在正确的位置添加
事件。preventDefault()
:如果我改为keyup,我可以通过添加破折号轻松跳过,如果我很快输入数字,你知道如何避免吗?