2010-12-04 62 views
1

任何人都可以找出为什么这不起作用。产生NAN,如果重置为一个数字(var输入上的文档产生0.该脚本应该加起来无限数量的字段,以product_total_price_PRI_的ID开头...给出NAN或0的Javascript简单计算

很明显,我错过了一些东西,从想看到我头疼

function getFields() { 
    var inputs = document.getElementsByTagName('input'); 
    var result = 0; 
    for(var i = 0; i < inputs.length; i++) { 
     if(inputs[i].id.indexOf('product_total_price_PRI_') == 0); 
      result += parseFloat(inputs[i].value); 
    } 

    alert(result); 
} 

回答

3

if()语法是关闭的,有结束语句;所以你result +=总是运行,它应该是:

function getFields() { 
    var inputs = document.getElementsByTagName('input'); 
    var result = 0; 
    for(var i = 0; i < inputs.length; i++) { 
     if(inputs[i].id.indexOf('product_total_price_PRI_') == 0) //no ; here 
      result += parseFloat(inputs[i].value); 
    } 

    alert(result); 
} 
+0

谢谢尼克,我一定是个傻瓜 – 2010-12-04 17:20:48

0

你有一个;后您的if需要被删除:

if(inputs[i].id.indexOf('product_total_price_PRI_') == 0) 
    result += parseFloat(inputs[i].value); 

而且它总是一个好主意,检查里面输入输入的字符串是一个数字:

if(inputs[i].id.indexOf('product_total_price_PRI_') == 0) 
{ 
    var temp = parseFloat(inputs[i].value); 
    if (!isNaN(temp)) { 
     result += temp; 
    } 
} 
0

空白字段评估为NaN,而不是0。你需要确保你不添加一个NaN的值

function getFields() { 
    var inputs = document.getElementsByTagName('input'); 
    var result = 0; 
    for (var i = 0; i < inputs.length; i++) { 
     if (inputs[i].id.indexOf('product_total_price_PRI_') == 0) { 
      var val = parseFloat(inputs[i].value); 
      if (val - 0 == val) // will be false if val is NaN 
       result += val; 
     } 
    } 

    alert(result); 
}