【问题标题】:Javascript Addition Error MessageJavascript 添加错误消息
【发布时间】:2012-05-10 05:22:42
【问题描述】:

我是 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吗?

【问题讨论】:

    标签: javascript html


    【解决方案1】:
    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/

    【讨论】:

    • 正则表达式是一种过于复杂的验证数字的解决方案,因为输入数字的有效方式有很多。最好只解析它,并检查数字isFinite
    【解决方案2】:

    它的意思是“不是一个数字”(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 所以你需要先去掉代码中的任何前导美元符号。

    【讨论】:

      【解决方案3】:

      试试这个:

      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 );
      }
      

      【讨论】:

        【解决方案4】:

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

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

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

        需要下载jQuery才能做到这一点:

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

        如何检测 NaN 的原因

        1. 已加载 html 元素(有时 html 在 javascript 之后加载)
        2. 值是否未定义?
        3. 你是在除以零吗?
        4. JavaScript 有 http://www.w3schools.com/jsref/jsref_isnan.asp

        【讨论】:

        • 支持我的回答,我会告诉你的!哈哈,开个玩笑,我会看看(但真的很赞成)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-05-15
        • 1970-01-01
        • 1970-01-01
        • 2020-01-31
        • 2016-08-30
        • 2013-07-11
        • 2012-03-28
        相关资源
        最近更新 更多