0

我有一个输入字段,我只希望允许输入正整数和负整数。我使用 onkeyup() 跟踪他们的输入,因为这是跨浏览器最一致的。真正的问题出现在尝试替换非数字字符而不替换开头的破折号时。

if(e.keyCode < 48 || e.keyCode > 57) {
    var data = e.target.value;

    if(e.target.value.match(/^[-]?/))
        e.target.value = '-' + data.substr(1).replace(/\D*/, "");
    else
        e.target.value = data.replace(/\D*/,"");
    }

基本上这里发生的事情是当他们输入数字时我会忽略,但是对于其他所有内容都试图替换他们可能添加的不是数字的任何内容。现在的问题是当我按下退格键时,由于某种原因,破折号立即返回。

例如
,我的输入字段有: -
当我按退格键时。
我的输入字段保持不变: -

工作代码:

        if(e.keyCode < 48 || e.keyCode > 57) {
            var data = e.target.value;

            if(e.target.value.match(/^[-]+/))
                e.target.value = '-' + data.substr(1).replace(/\D/, "");
            else { console.log('else');
                e.target.value = data.replace(/\D/,"");
            }
        }
4

2 回答 2

0

改变

if(e.keyCode < 48 || e.keyCode > 57) {

if((e.keyCode < 48 || e.keyCode > 57) && e.keyCode!=8) {

然后你会像数字一样忽略退格字符,这不会导致任何其他问题。

于 2013-08-06T20:28:40.407 回答
0

我刚刚发现了这个问题,Renegade 有一个不错的方法,但是我犯了一个正则表达式错误。应该是这样的:

if(e.target.value.match(/^[-]+/))

而不是:

if(e.target.value.match(/^[-]?/))

因为即使破折号不存在,后者也会给出真实的。? 表示 0 或 1 匹配,+ 表示 1 或更多。

于 2013-08-06T20:31:07.613 回答