0

我是 javascript 新手,想知道以下错误消息是什么意思:

你好_ _ NaN

NaN 是什么意思?

我的脚本如下:

    <script type="text/javascript">
function validateForm()
{
var x=document.forms["myForm"]["name"].value;
if (x==null || x=="")
  {
  alert("What Is Your Name?");
  return false;
  }
}


function addNos(){
    var a, b, res;
    a= parseFloat(document.myForm.salary.value);
    b= parseFloat(document.myForm.requiredamount.value);
    res = a+b;
    window.alert("Hello" + a + b );
}

</script>

    <form name="myForm" action="" onsubmit="return validateForm()" method="post">


<label>Your Name</label> <br /><br /><input name="name" type="text" />

<br /><br />
<label>Your Salary</label><br /><br />
<select name="salary">
  <option value="10000">10000</option>
  <option value="20000">20000</option>
  <option value="30000">30000</option>
</select>

<br /><br />
<label>Required Amount</label><br /><br />
<input name="requiredamount" type="radio" value="5000" /> 5000
<input name="requiredamount" type="radio" value="10000" /> 10000
<input name="requiredamount" type="radio" value="15000" /> 15000
<input name="requiredamount" type="radio" value="20000" /> 20000

<br /><br />

<input name="" type="submit" value="Get Quote" onclick="addNos()" />


</form>

我正在尝试将所需的金额与薪水相加,并让名称出现在对话框中。

有人知道anwseR吗?

4

4 回答 4

0

NaN 表示不是数字。除以零或添加未定义的值时,可能会发生这种情况。

维基: http ://en.wikipedia.org/wiki/NaN

好的,我没有时间测试您的代码,但看起来您的 JavaScript 正在尝试在用户输入值之前访问表单元素?(意味着它们是未定义的)。

需要下载 jQuery 来执行此操作:

你可以将你的 JavaScript 代码包围在$(document).ready(function(){ //your code {);

如何检测 NaN 的原因

  1. 已加载 html 元素(有时 html 在 javascript 之后加载)
  2. 值是否未定义?
  3. 你除以零吗?
  4. JavaScript 有http://www.w3schools.com/jsref/jsref_isnan.asp
于 2012-04-30T13:57:29.110 回答
0
function addNos(){
    var a, b, res;
    a= parseFloat(document.myForm.salary.value);
    b= parseFloat(document.myForm.requiredamount.value);
    res = a+b;
    window.alert("Hello" + a + b );
}

您依靠用户输入来正确输入数字。您应该在解析之前使用 RegEx 验证输入是否为数字。

http://jsfiddle.net/rMgeB/

于 2012-04-30T14:01:13.960 回答
0

它的意思是“不是数字”(NaN)。如果“salary”字段或“requiredamount”字段中有一些非数字值,则会发生这种情况。例如,如果您分别具有值“100”和“Blah”,则用于计算 a 的 parseFloat() 将返回数字 100,而用于 b 的 parseFloat() 将返回 NaN,因为“Blah”没有数字表示。随后,当您尝试在警报框中添加 100 和 NaN 时,您将看到您所看到的行为。

您可以使用 isNaN() 函数仔细检查这些值:

a = parseFloat(...);
if (isNaN(a))
{
    alert("Sorry, you must enter a real number");
    return;
}

希望这能说明问题。

编辑:

最有可能的情况是您的输入中有一个 $ 。parseFloat("$100") == NaNparseFloat("100") == 100因此您需要先去除代码中的任何前导美元符号。

于 2012-04-30T14:02:18.957 回答
0

尝试这个:

http://jsfiddle.net/LEX84/

如果选择了单选按钮,我没有添加测试。如果未选择单选按钮,则结果为 NaN。

获取单选按钮是从这里:javascript selected radio

function validateForm()
{
var x=document.forms["myForm"]["name"].value;
if (x==null || x=="")
  {
  alert("What Is Your Name?");
  return false;
  }
}

function getCheckedRadioId(name) {
    var elements = document.getElementsByName(name);

    for (var i=0, len=elements.length; i<len; ++i)
        if (elements[i].checked) return elements[i].value;
}
function addNos(){
    var a, b, res;
    a= parseFloat(document.myForm.salary[document.myForm.salary.selectedIndex].value);
    alert(a);
    b= parseFloat(getCheckedRadioId("requiredamount"));
    res = a+b;
    window.alert("Hello " + a + " " + b );
}
于 2012-04-30T14:03:09.873 回答