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