1

I've seen this in JavaScript in numerous examples but I can't get this to work for me. I must be overlooking something, so I would appreciate a kind soul helping me out here because I am new to JavaScript:

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

The above form input is gathered from:

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

If I enter in abc as input, the alert I am not a number doesn't display. If I enter "abc" with quotes around is, it does display the alert.

I am checking input from the form where the user should only be allowed to enter numbers. Only numbers should be accepted. Thank you!

Edit: spend is US dollar amount. So it needs to be able to accept amounts such as 123.45. Edit2: Sorry, num is indeed form.spend.value.

4

3 回答 3

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();">
于 2012-07-31T09:24:32.980 回答
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');
}
于 2012-07-31T09:25:31.327 回答
0

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

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

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

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

你不应该把eval任何地方放在用户输入附近。只需删除该行。

于 2012-07-31T09:19:14.917 回答