函数适用于文本输入,但不适用于数字输入

时间:2015-09-06 23:40:09

标签: javascript html function input nan

我有一个JavaScript函数,如果在其中键入字母字符,则会清除文本输入。

input = document.getElementById('inf');
input.onkeyup = function() {
  value = input.value;
  truth = isNaN(value);
  if (truth) {
    input.value = '';
  }

};
input {
  border: 2px solid black;
  margin-right: 10px;
}
<input type='text' id='inf' />Numbers Only
<br />Type a number in, and it stays. Put a letter in, and the input clears itself

问题是,当输入类型设置为number时,这不起作用,如下面的示例所示。

input=document.getElementById('inf');
input.onkeyup=function(){
  value=input.value;
  truth=isNaN(value);
  if(truth){
    input.value='';
  }
  
};
input{
  border:2px solid black;
  }
<input type='number' id='inf'/>
<br />
As you can see, it doesnt work anymore.

我的问题有两个:

1)为什么它适用于文本输入而不是数字输入?

2)有一个简单的解决方法吗?我需要它作为数字输入,所以必须保持不变。

请仅限Javascript答案。没有jQuery。

3 个答案:

答案 0 :(得分:1)

数字输入不允许非数字数据,因此这将始终为false:

truth= isNaN(value);

相反,您可以检查按下的键是数字还是小数:

input=document.getElementById('inf');
input.onkeyup=function(e) {
  if(!/[\d\.]/.test(String.fromCharCode(e.which))) {
    input.value='';
  }
};
<input type='number' id='inf'/>

答案 1 :(得分:0)

当输入类型为数字时,如果文本中存在非数字字符,则返回null 所以

"abc123" = ""  
"123abc" = ""  
"123" = "123"  


isNaN(null) is false.

答案 2 :(得分:0)

您只需检查blank以及isNaN支票

即可

var truth = isNaN(value) || value==='';

由于输入类型=数字会将任何非数字转换为空白