2014-10-17 61 views
0

使用JQuery,我從複選框值填充數組。然後,我創建了循環來遍歷數組,將複選框的值解析爲整數,然後將它們相加並賦值給一個變量「total」。當我運行這個時,我得到的不是一個數字,我懷疑某個循環有什麼問題。有人能告訴我我在這裏做錯了什麼。如果我的編碼不夠清晰,請原諒我,我剛剛從JS開始。parseInt數組和總和問題

// create array and push selected checkbox values to it 
 
    var allVals = []; 
 

 
    $('input:checkbox[name=brand]:checked').each(function() { 
 
     allVals.push($(this).val()); 
 
     //allVals.map(number); 
 
    }); 
 
     
 
    for (var i=0; i < allVals.length; i++) { 
 
     var total 
 
     allVals[i] = parseInt(allVals[i]); 
 
     total += allVals[i] << 0; 
 
     alert(total); 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

+0

注意,目前的答案是一半錯了 - 你確實必須初始化'total'爲零(否則'未定義+ number'會'NaN'),但你不*必須在循環之外重定位該變量,因爲* Javascript沒有循環範圍*。 – 2014-10-17 16:20:14

回答

-2

第一所有你必須在你的for循環之外創建總變量 然後將它初始化爲零

var total = 0; 

for (var i=0; i < allVals.length; i++) { 

    allVals[i] = parseInt(allVals[i],10); 
    total += allVals[i]; 
    console.log(total); 
} 

因爲要添加編號,以未初始化的變量 你正在爲NaN導致

例如

var c; 
c +=1; //this will be NaN(not a numeric number) 

的原因是,當你初始化變量的JavaScript知道應給予該變量的正確數據類型

+0

這工作!非常感謝!我一直拉着我的頭髮幾個小時試圖讓這個工作。我很感激! – exeleon 2014-10-17 16:25:34

+0

一個建議是在使用parseInt時總是將弧度設置爲10,否則最終可能會出現八進制數字 – leopic 2014-10-17 17:16:57

+0

一個很好的通知,但是如果您沒有指定基準,默認基數是基數10,所以parseInt('20')<=> parseInt函數( '20',10) – Ismail 2014-10-26 22:02:33

1

你聲明totalfor內部因此它的每一次復位 - 我修改你的代碼了一點,但這應該工作:

var numbers = $('input:checkbox[name=brand]:checked').map(function() { 
    return isNaN(this.value) ? 0 : this.value; 
}).get(); 

var total = 0; 

for (var i = 0; i < numbers.length; i++) { 
    total += numbers[i]; 
} 

alert(total); 
+0

@ArindamNayak - 如果'isNan'返回'true' - 那麼'map'將返回'0' .... – tymeJV 2014-10-17 16:21:56

0

可能就這麼簡單:

$('[type=checkbox]').on('click', sum); 
 
    
 
function sum(e) { 
 
    var total = $('[type=checkbox]:checked') 
 
       .toArray() 
 
       .reduce(function (a,b) {return a + +b.value;}, 0); 
 
    $('[data-sum]').attr('data-sum', total.toFixed(2)); 
 
}
[data-sum] { 
 
    border-top: 1px solid #c0c0c0; 
 
    width: 100px 
 
} 
 

 
[data-sum]:before { 
 
    content: '\03A3 'attr(data-sum); 
 
    padding-left: 4px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="checkbox" value="23.23"> 23.23<br> 
 
<input type="checkbox" value="3.33"> 3.33<br> 
 
<input type="checkbox" value="15.00"> 15.00<br> 
 
<input type="checkbox" value="1101.22"> 1101.22<br> 
 
<input type="checkbox" value="78.10"> 78.10<br> 
 
<input type="checkbox" value="122.05"> 122.05<br> 
 
<input type="checkbox" value="435.00"> 435.00<br> 
 
<div data-sum="0"></div>