为什么只有当我在它周围输入引号时,isNaN才能为字符串输入true?

时间:2012-07-31 09:13:19

标签: javascript validation

我在很多例子中用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之类的金额。 Edit2:抱歉,num确实是form.spend.value。

3 个答案:

答案 0 :(得分:1)

检查此代码,其工作情况。
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();">

答案 1 :(得分:1)

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

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 字符串,不会抛出任何错误,您将看到警告。

就像James McLaughlin指出的那样,你应该使用适当的函数来处理数字。


顺便说一下,正确编写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');
}

答案 2 :(得分:0)

  

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

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

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

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

您不应该将eval置于用户输入附近。只需删除该行。