Javascript Can';无法使isNaN函数正常工作

Javascript Can';无法使isNaN函数正常工作,javascript,Javascript,我已经创建了三个文本框。前两个文本框用于两个数字(用于减法)。结果将显示在第三个文本框中。我正在尝试这样做,如果用户输入的是字母而不是数字,就会出现警报 现在,isNaN不起作用了。无论何时我在第一个或第二个文本框中输入任何内容,它都会发出警报,无论数字或字母如何。这是我的密码 function myFunction() { var x = document.getElementById("taxFree"); //textbox 1 var y = document.getEl

我已经创建了三个文本框。前两个文本框用于两个数字(用于减法)。结果将显示在第三个文本框中。我正在尝试这样做,如果用户输入的是字母而不是数字,就会出现警报

现在,isNaN不起作用了。无论何时我在第一个或第二个文本框中输入任何内容,它都会发出警报,无论数字或字母如何。这是我的密码

function myFunction() {
    var x = document.getElementById("taxFree"); //textbox 1
    var y = document.getElementById("prodCost"); //textbox 2
    var res = document.getElementById("salesMargin"); //Result textbox

     // If x or y is Not a Number, send alert to user
    if (isNaN(x) || isNaN(y)) {
        alert("Numers only!");
        return;
    } 
    res.value = x.value - y.value;
}

提前谢谢

尝试检查
输入的

if (isNaN(x.value) || isNaN(y.value)) {
函数告诉您一个值是否等于特殊值。如果它是一个字符串,它将尝试在之前解析它
isNaN
不会为每个非数字的值返回true,例如
isNaN(true)==false

另一件事是,您尝试对输入元素本身而不是其值调用
isNaN
。请尝试以下方法:

函数myFunction(){
var taxFree=document.getElementById(“taxFree”);
var prodCost=document.getElementById(“prodCost”);
var salesMargin=document.getElementById(“salesMargin”);//结果文本框
var x=parseFloat(免税值);
var y=分析浮动(prodCost.value);
//如果x或y不是数字,则向用户发送警报
if(isNaN(x)| | isNaN(y)){
警报(“仅限数字!”);
返回;
} 
salesMargin.value=x-y;
}


如果您想知道输入的输入是否为数字,我必须说此方法将不起作用

试试这个,这个函数只接受0到9之间的数字,其他任何数字都不允许,甚至小数也是不允许的。它通过检查输入的字符来实现


代码:
onkeypress='return event.charCode>=48&&event.charCode=48&&event.charCode也粘贴html
x
y
是DOM元素。他们总是不是一个数字。您需要将其内容显式转换为int。您还需要提供一个基数以避免意外:
parseInt(x.value,10)
。但是
isNaN()
方法在测试结果是否为
NaN
之前已经尝试将其参数转换为数字。那么添加
parseInt()
有什么帮助呢?@MoisheLipsker谢谢!这帮了大忙!总是一些小细节。再次感谢!几分钟后我会记下你的答案!我不建议您使用此解决方案,因为您实际上并不处理数字。如果最后的表达式是
x.value+y.value
,则会得到令人惊讶的结果。我认为如果
res.value=x.value-y.value改为
res.value=x.value+y.value,代码将连接这两个值,而不是将它们作为数字相加<代码>'5'+'5'
'55'
,而
5+5
10
@JohnBurger错了。键入
asd
,看看会发生什么。@JohnBurger我的意思是你是对的,但是你没有注意到对
parseFloat
@JohnBurger的调用-
isNaN()
函数试图将其参数转换成一个数字,然后告诉你转换的结果是否是
NaN
,所以
isNaN(“abc”)
返回
true
。Tamas-添加
parseFloat()
并没有真正的帮助,因为如果用户输入
“123abc”
,那么它将被接受为数字
123
,这充其量是误导性的。如果用户通过编辑菜单输入字母或拖放怎么办?是的,它只会限制输入,因此,拖放并复制粘贴的元素将通过此过滤器:(
<input id="taxfree" onkeypress='return event.charCode >= 48 && event.charCode <= 57'>