在javascript中添加表值给出了NaN表格单元格中的结果

问题描述:

我在总表格单元格值中得到了NaN的结果。每次用户输入数量时,我将添加两个正在计算的总单元。我想弄明白为什么我会得到这个结果。这是在其中进行计算的函数的代码。在javascript中添加表值给出了NaN表格单元格中的结果

<html> 
<head> 
<title> Cart </title> 
<h1> My cart </h1> 
<script type = "text/javascript"> 

function retr() 
{ 
    var cke = document.cookie; 
    var tot1 = document.getElementById("t1").value; 
    var tot2 = document.getElementById("t2").value; 

    if (cke.length>0) { 
     start = cke.indexOf("Circle="); 
     if (start!= -1) { 
      start = start + 7 
      end = cke.indexOf("$", start); 
      if (end == -1) end = cke.length; 
      qu1 = cke.substring(start, end); 
      document.getElementById("q1").value = qu1; 
     } 
    } 

    if (cke.length>0) { 
     start1 = cke.indexOf("$"); 
     if (start1!= -1) { 
      start1 = start1 + 0 
      end = cke.indexOf("e", start1); 
      if (end == -1) end = cke.length; 
      pr1 = cke.substring(start1, end); 
      document.getElementById("p1").value = pr1; 

     } 
    } 

    document.getElementById("t1").value = parseFloat(qu1) * parseFloat(pr1); 

    if (cke.length>0) { 
     start = cke.indexOf("Stickman="); 
     if (start!= -1) { 
      start = start + 9 
      end = cke.indexOf("$", start); 
      if (end == -1) end = cke.length; 
      qu2 = cke.substring(start, end); 
      document.getElementById("q2").value = qu2; 
     } 
    } 

    if (cke.length>0) { 
     start = cke.indexOf("$"); 
     if (start!= -1) { 
      start = start + 54 
      end = cke.indexOf("e", start); 
      if (end == -1) end = cke.length; 
      pr2 = cke.substring(start, end); 
      document.getElementById("p2").value = pr2; 
     } 
    } 

    alert(qu1); 
    alert(pr1); 
    alert(qu2); 
    alert(pr2); 
    alert(t2); 
    document.getElementById("t2").value = parseFloat(qu2) * parseFloat(pr2); 
    document.getElementById("tot").value = parseFloat(tot1) + parseFloat(tot2); 
    document.getElementById("ret").value = cke; 
} 


</script> 
</head> 

<body onload = "retr()"> 
<table border = "1"> 
    <td>Circle </td> 
    <td><input type = "text" size = "8" id = "q1" readonly = "readonly" /></td> 
    <td> <input type = "text" size = "8" id = "p1" readonly = "readonly" /> </td> 
    <td> <input type = "text" size = "8" id ="t1"> </td> 
    <tr> </tr> 
    <td> Stickman </td> 
    <td> <input type = "text" size = "8" id = "q2" readonly = "readonly" /></td> 
    <td> <input type = "text" size = "8" id = "p2" readonly = "readonly" /> </td> 
    <td> <input type = "text" size = "8" id = "t2" > </td> 
    <tr> </tr> 
    <td colspan = "3"> TOTAL:</td> 
    <td> <input type = "text" size = "8" id = "tot"> </td> 
</table> 
<br /> <br /> 
<input type ="text" id = "ret" readonly = "readonly" /> 
<br/> <br /> 
<input type = "button" value = "Checkout"> 
<br /> <br /> 
<a href = "store.html" > Continue Shopping </a> 


</body> 
</html> 
+0

是否可以看演示? – 2012-04-27 21:13:59

+0

尝试在http://jsfiddle.net/ – snies 2012-04-27 21:15:51

+0

上发布示例Console.log在各个阶段显示这些值,以便您可以看到它们的值。也许其中一个是未定义的。 – Jack 2012-04-27 21:16:08

你熟悉JavaScript值:Not-a-Number(NAN)?这听起来像一些用户输入的值产生的结果基本上是非法的数字。

好了,假设你的cookie看起来是这样的:

"Circle=123$456e; Stickman=123$456e" 

我有固定的代码运行。这是一个工作示例:

jsfiddle example

你在你的代码中的几个问题,要点:

  1. 你不停的“$”符号是不是一个数字,因此你得到了 NaN
  2. 您填写的 填充后没有设置变量tot1和tot2,或者至少您没有提供默认值。
  3. 搜索第二个价格时,您没有使用最后一个“$”符号的start1位置作为起点。因此你以错误的价格结束了。