删除在keydown输入中输入的字母会删除数字吗?

时间:2015-06-06 18:03:17

标签: javascript

我正在尝试构建一个在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}}

小提琴:http://jsfiddle.net/cm803xuu/4/

2 个答案:

答案 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;
    }
});