我有一个输入字段,我只想要允许正负整数。我用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*/,"");
}
基本上这里发生的事情是我在输入数字时忽略,但是其他一切都试图替换他们可能添加的任何不是数字的东西。现在的问题是,当我按Backspace时,由于某种原因,破折号立即回来。
E.g。
我的输入栏有: - 当我按退格键时。
我的输入字段保持如下: -
工作代码:
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/,"");
}
}
答案 0 :(得分:0)
更改
if(e.keyCode < 48 || e.keyCode > 57) {
到
if((e.keyCode < 48 || e.keyCode > 57) && e.keyCode!=8) {
然后你会忽略退格字符,就像一个数字,这不会引起任何其他问题。
答案 1 :(得分:0)
我刚刚发现问题,Renegade有一个不错的方法,但我犯了一个正则表达式的错误。它应该是这样的:
if(e.target.value.match(/^[-]+/))
而不是:
if(e.target.value.match(/^[-]?/))
因为即使破折号不存在,后者也会成立。 ?表示0或1个匹配,+为1或更多。