2013-08-21 21 views
0

我正在更新收据的基础上用户输入旁边的窗体。数学和表单字段,获取NaN

我的问题是,我觉得我处理文本值,而不是整数,因为一些数学我做的生成NaN,而他们表现得很好单独用的console.log

我收集三个值,然后尝试将它们相乘以显示在收据中。这返回NaN。

至今代码:

$('fieldset').on('change', function(){ 

    group = $(this).attr('title'); 

    switch(group){ 
     case "dr": 
      var name = $(this).find('option:selected').attr('label'); 
      var value = $(this).find('option:selected').attr('value'); 
      var weeks = $(this).find('option:selected').attr('data-weeks'); 
      var copies = $(this).find('input').val(); 

      //Only update the receipt when both are set (separate fields)   
      if(name != "" && copies != ""){ 
       produkter.push([name, value*weeks*copies]); 
       receipt(produkter); 
     } 

     break; 

     [other cases...] 
    } 

// Accepts an array with a name and a price sum. 
function receipt(produkter){ 
    produkter.sort(); 

    $('.receipt li').remove(); // Clears the current receipt. 

    for (var i = 0; i < produkter.length; i++) { 
     $('.kvitto').append(
       '<li><span class="item">' + produkter[i][0] + '</span><span class="price">' + produkter[i][1] + '</span></li>'); 
    } 

    console.log(produkter); 
} 

<fieldset title="dr"> 

    <label>DR format</label> 
    <select> 
     <option selected label="dr16" data-weeks="52" value="0,327"> 
      DR 16 sides</option> 
     <option label="dr8" data-weeks="52" value="0,214"> 
      DR 8 Tab</option> 
     <option label="drFF" data-weeks="52" value="0,352"> 
      DR Full format</option> 
    </select> 

    <br><br> 

    <label>DR Copies</label> 
    <input type="text" label="dr-copies" /> 

</fieldset> 

回答

0

你确实是从attr功能敛字符串值。你需要将它们转换为整数,如:

produkter.push([name, +value * +weeks * +copies]); 

Basic example

或者您可以使用parseInt,虽然它并不像succint:

produkter.push([name, parseInt(value, 10) * parseInt(weeks, 10) * parseInt(copies, 10)]); 

此外,您还需要应付属性或值通过为变量分配缺省值而不可用,如下所示:

var name = $(this).find('option:selected').attr('label') || 0; 
var value = $(this).find('option:selected').attr('value') || 0; 
var weeks = $(this).find('option:selected').attr('data-weeks') || 0; 
var copies = $(this).find('input').val() || 0; 
+0

的+解决方案是不适合我的工作。尝试了'var total = + value * + weeks * + copies;'并且它用console.log输出NaN – Xavio

+0

您是否也尝试为我的答案的第二部分提供变量的默认值? –

+0

虽然发现了问题。正在使用,而不是。为小数。所以现在+解决方案正在工作。非常感谢! – Xavio

0

这行代码.VAL的()将返回一个字符串/ null或数组,给你一个NaN(非数字)

var copies = $(this).find('input').val();