为什么只有当我在字符串周围输入引号时,表单输入的isNaN才为true

Why does isNaN for form input true for a string only if I enter quotes around it?

本文关键字:输入 表单 isNaN true 才为 字符串 为什么 周围      更新时间:2024-06-03

我在JavaScript中看到了很多例子,但我无法让它为我工作。我一定忽略了一些东西,所以我很感激有一个善良的灵魂在这里帮助我,因为我是JavaScript的新手:

 spend=eval(form.spend.value);
 if(isNaN(form.spend.value)) {
     alert('I am not a number');
 }

以上表格输入来自:

<input type=text name=spend value="" size=6 STYLE="background-color: #EDEDE8;">

如果我输入abc作为输入,则不会显示"我不是数字"的警告。如果我输入带引号的"abc",它确实会显示警报。

我正在检查表单中的输入,其中用户应该只被允许输入数字。只能接受数字。非常感谢。

编辑:支出是美元金额。因此,它需要能够接受123.45这样的金额。第2版:对不起,num确实是form.spend.value.

检查这段代码,它正在工作
js:

function abc(){
var aa = document.getElementById('myid').value;
if(isNaN(aa)) {
 alert('I am not a number');
}
}

表单:

<input type=text name=spend value="" id="myid" size=6 STYLE="background-color: #EDEDE8;">
    <input type="button" onClick="abc();">

因为这不是处理数字的正确方法。

spend=eval(form.spend.value); // Problem is on this line
if(isNaN(form.spend.value)) {
    alert('I am not a number');
}

如果有人在form.spend.value中输入了一些内容,例如alert("foolish"),你会惊讶地看到它正在执行,例如eval("alert('"foolish'")")

如果它类似于this_is_an_undefined_variable_name,它会抛出一个错误并终止脚本,这就是为什么您看不到警报的原因。

如果它类似于"hihi",因为这是一个有效的JavaScript字符串,则没有抛出错误,您将看到警报。

正如詹姆斯·麦克劳林所指出的,你应该使用适当的函数来处理一个数字。


顺便说一下,正确编写HTML应该更好(引用属性):

<input type="text" name="spend" id="spend" value="" size="6" STYLE="background-color: #EDEDE8;">

并使用更好的方式检索表单(使用document.getElementsByName也可以):

spend=parseFloat(document.getElementById("spend").value);
// OR
spend=parseFloat(document.getElementsByName("spend")[0].value);
if(isNaN(spend)) {
    alert('I am not a number');
}

如果我输入abc作为输入,则不会显示"我不是数字"的警告。如果我输入带引号的"abc",它确实会显示警报。

这是因为脚本在到达警报之前出错并死亡。

> var form = { spend: { value: 'abc' } };
>  spend=eval(form.spend.value);
ReferenceError: abc is not defined

如果该值周围有引号(即'"abc"'),那么它将被计算为字符串文字,而不是变量。

您不应该将eval放在用户输入附近的任何位置。只要去掉那条线。