2013-12-19 18 views
0

嘿,我正在嘗試更新此代碼。除了一件事外,它幾乎可以滿足我的需求。從技術上來說,兩個主要是我關心的一個。當我檢查我想要的盒子時,它會按照它應該加起來的方式加起來,並且按照它應該增加的5%,但是它將答案放在我提交按鈕的值中。我怎樣才能阻止這種情況發生?其次(現在不那麼重要)我怎樣才能使總價值回報爲一個只有2個小數點的美元數額,所以不是返回0.924而是返回$ .92。謝謝!如何使用javascript從複選框中總結數值

<body> 
<h1> The Fruit Form</h1> 
<form action="" name="form1" id="form1"> 
<input type="checkbox" id='fruit0' value=".59" >Apples (.59)<br> 
<input type="checkbox" id='fruit1' value=".49">Oranges (.49)<br> 
<input type="checkbox" id='fruit2' value=".39">Bananas(.39)<br> 

<input type="submit" onclick="UpdateCost()" id="totalcost" value="Submit"> 

</form> 
<script type="text/javascript"> 
function UpdateCost() { 
    var sum = 0; 
    var fid, elem; 
    for (i=0; i<3; i++) { 
    fid = 'fruit'+i; 
    elem = document.getElementById(fid); 
    if (elem.checked == true) { sum += Number(elem.value); } 
    } 
    document.getElementById('totalcost').value = sum.toFixed(2)*1.05; 
    alert("Your Total Is:" + totalcost.value); 
    return false 
} 
</script> 
</body> 
+0

試試'(sum * 1.05).toFixed(2)'而不是'sum.toFixed(2)* 1.05' – PSL

+0

嗨,至少可以讓我們降到兩位小數!謝謝 – user3097967

+0

太好了,我們解決了你的問題。但是,如果您刪除了錯誤的代碼,則該問題對於未來的用戶而言是無用的。我會爲你恢復。請注意,您也可以自己發佈答案,指出這是工作代碼。 – GitaarLAB

回答

0

您的提交按鈕的id是totalcost和你的函數獲取元素與ID totalcost

document.getElementById('totalcost').value = sum.toFixed(2)*1.05; 

所以,你可以不這樣做防止這一點。

而不是sum.toFixed(2)*1.05你應該做PS2的評論(sum * 1.05).toFixed(2)

相反,更新您的變量:

sum = (sum * 1.05).toFixed(2); 

或創建一個新的變量說total

var total = (sum * 1.05).toFixed(2); 

或只是處理它,你的輸出值:

alert( (sum * 1.05).toFixed(2) ); 

額外:
由於您正在與錢多達2小數點,我想讓你意識到在JavaScript 0.1 + 0.2不是0.3的事實!

避免這種情況的最佳方法是將所有數字乘以所需的精度,並將最終(子)結果按輸出的精度進行分類。所以:(52美分+18美分= 70美分)/ 100 = 0.7(在這裏你可以使用toFixed,所以它變成0.70)。

+0

沒錯。我認爲這個地區的某個地方存在問題,但我不知道還有什麼地方可以解決。有什麼建議麼? – user3097967

+0

更新了我的答案。 – GitaarLAB

+0

嘿,非常感謝,這幫助我更新了我原來的問題......它可能不是100%準確的,但大部分它是做我想要的。你肯定把我推向了正確的方向,再次感謝。 – user3097967

0

只是一些代碼的註釋:

如果能到形式的參考,如果你通過這個的功能:

<input type="submit" onclick="UpdateCost(this)" ...> 

在功能:

function UpdateCost(element) { 
    var sum = 0; 
    var fid, elem; 

商店對錶格的參考:

var form = element.form; 

    for (i=0; i<3; i++) { 
    fid = 'fruit'+i; 
    elem = document.getElementById(fid); 

上面可以是:

elem = form[fid]; 

    if (elem.checked == true) { 
     sum += Number(elem.value); 
    } 

而這可以是:

sum += elem.checked? +elem.value : 0; 

其中一元+將所述值轉換爲數字。

} 
    document.getElementById('totalcost').value = sum.toFixed(2)*1.05; 

變爲:

form.totalcost.value = '$' + (sum * 1.05).toFixed(2); 

HTH。

+0

感謝RobG,這也是有用的信息,這使得事情變得更清潔。 – user3097967

相關問題