2014-03-04 34 views
1

我的代碼有問題。Javascript計數價格總和*數量返回NaN

$('input[name="pocet"]').each(function(){ 
       var $mnozstvo = parseInt($('this').val()); 
       var $id = parseInt($(this).attr('id').substring(6)); 
       var $aktualnyProdukt = $('#' + $id); 
       var $povodnaCena = parseFloat($aktualnyProdukt.data('price')); 
       var $riadkoveZlavy = $aktualnyProdukt.find('div .vypocetPreZlavu'); 
       var $aktualnaCena = $povodnaCena; 
       if($riadkoveZlavy.length > 0) { 
        $riadkoveZlavy.each(function() { 
         $mnozstvoNaZlavu = parseInt($(this).data('mnozstvo')); 
         $cenaPoZlave = parseFloat($(this).data('cena')); 

         if($mnozstvo >= $mnozstvoNaZlavu) { 
          $aktualnaCena = $cenaPoZlave; 
         } 
        }); 
       } 

       if(isNaN($mnozstvo)) $mnozstvo = 0; 
       total += $mnozstvo * $aktualnaCena; 
}); 

但是,運行此函數後,總返回NaN,我不知道爲什麼。你可以幫幫我嗎?

HTML: http://jsfiddle.net/UL7Sr/

+0

我希望這些變量名對你來說不會是一個大問題,因爲它們都是斯洛伐克語。 –

+0

這是一個有點棘手:))..確保你沒有使用任何字符串乘法... – csanonymus

回答

0
var $povodnaCena = parseFloat($aktualnyProdukt.data('price')); 

var $povodnaCena = parseFloat($aktualnyProdukt.attr('data-price')); 

將第一行替換爲第二行解決了我的問題。

4

var $mnozstvo = parseInt($('this').val());實際上應該是var $mnozstvo = parseInt($(this).val());

此外,確保$aktualnaCena是一個數字。您對$mnozstvo執行此操作,但對$aktualnaCena執行此操作。請嘗試:

if(isNaN($mnozstvo)) $mnozstvo = 0; 
if(isNaN($aktualnaCena)) $aktualnaCena = 0; 
total += $mnozstvo * $aktualnaCena; 

此外,請不要在$前加上所有變量。 JavaScript不是PHP。使用jQuery時的約定是,你可以用jQuery元素變量來區別於其他變量。如果你在上下文中將它用於所有變量,那實際上是令人困惑的。

+1

此外,由於$(this)多次使用,這將是有道理的做一次,並將其另存爲一個變量:'var elem = $(this)'。每次執行'$(...)'時,都迫使jQuery創建一個新對象。 –

+0

感謝您的評論,我是jQuery的新手,所以我還沒有完全理解所有的東西。但是,代碼中似乎還有另一個錯誤,因爲這還沒有解決我的問題。 –

+0

@MarošGašparík,我用其他的東西更新了我的答案,你可以嘗試 – neelsg