2013-08-21 57 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();