2013-04-10 133 views
0

我的工作只需要在購買時向加利福尼亞州居民銷售稅收取費用。我寫了我希望的JavaScript函數,當客戶從狀態的下拉列表中選擇加利福尼亞時,它將應用銷售稅。我給每個州賦予了「其他」和加利福尼亞州的價值或「CA」的價值。我的代碼每次計算銷售稅爲0,導致在選擇「CA」時稅收永遠不會應用於總計。我使用onSelect = UpdateCost()作爲我的狀態列表,onChange = UpdateCost()選中產品複選框。我的代碼中有哪部分阻止了正確計算稅款?選擇稅計算

function UpdateCost() { 
    var stotal = 0; 
    var ttotal = 0; 
    var gtotal = 0; 
    var tax = .0825; 
    var gn, elem; 
    for (i=0; i<12; i++) { 
     gn = 'manual'+i; 
     elem = document.getElementById(gn); 
    if (elem.checked == true) { stotal += Number(elem.value); } 
} 
    var state = document.getElementById('state'); 
    var selection = state.options[state.selectedIndex].value; 
if (selection = 'CA') { ttotal += tax * stotal; } 
if (selection = 'else') {ttotal = 0;} 
if(!isNaN(ttotal)) { 
    var calitax = ttotal.toFixed(2); 
    document.getElementById('taxtotal').value = calitax; 
    document.getElementById('subtotal').value = stotal.toFixed(2); 
    } 
    var gtotal = ttotal + stotal; 
    if(!isNaN(gtotal)) { 
    var grand = gtotal.toFixed(2); 
    document.getElementById('grandtotal').value = grand;} 

    } 

這裏是(因爲我能得到它,反正一樣簡單)已經簡化了相關的表單代碼:

//in the header of course. 
<script type="text/javascript" src="orderform.js"></script> 

<form action="" method="post"> 
<fieldset> 
State: <select name="state" id="state" onSelect="UpdateCost()"> 
<option value="else" id="else">AL</option> 
<option value="else" id="else">AK</option> 
<option value="else" id="else">AZ</option> 
<option value="else" id="else">AR</option> 
<option value="CA" id="CA">CA</option> 
</select> 
<p>Select the manuals to order</p> 

<input name="manual" type="checkbox" id='manual6' onclick="UpdateCost()" value="185">manual 1<br /> 
<input name="manual" type="checkbox" id='manual0' onclick="UpdateCost()" value="220">manual 2<br /><br /> 

<input name="manual" type="checkbox" id='manual7' onclick="UpdateCost()" value="155">manual 3<br /> 
<input name="manual" type="checkbox" id='manual1' onclick="UpdateCost()" value="185">manual 4<br /><br /> 

<h3>**SAVE $50** WHEN YOU BUY BOTH</h3><br /> 
<input name="manual" type="checkbox" id='manual8' onclick="UpdateCost()" value="290">manual 5<br /> 
Or:<br /> 
<input name="manual" type="checkbox" id='manual2' onclick="UpdateCost()" value="355">manual 6<br /><br /> 
<hr> 
<input name="manual" type="checkbox" id='manual9' onclick="UpdateCost()" value="190">manual 7<br /> 
<input name="manual" type="checkbox" id='manual3' onclick="UpdateCost()" value="225">manual 8<br /><br /> 

<input name="manual" type="checkbox" id='manual10' onclick="UpdateCost()" value="125">manual 9<br /> 
<input name="manual" type="checkbox" id='manual4' onclick="UpdateCost()" value="150">manual 10<br /><br /> 
<h3>**SAVE $50** WHEN YOU BUY BOTH</h3><br /> 
<input name="manual" type="checkbox" id='manual11' onclick="UpdateCost()" value="265">11<br /> 
Or:<br /> 
<input name="manual" type="checkbox" id='manual5' onclick="UpdateCost()" value="325">12<br /><br /> 

Subtotal: <input name="subtotal" type="text" id="subtotal" value=""><br /> 
California Resident Tax: <input name="taxtotal" type="text" id="taxtotal" value=""><br /> 
Total: <input name="grandtotal" type="text" id="grandtotal" value=""><br /> 

</fieldset> 

很抱歉的長度!感謝您的幫助:D

+0

爲什麼不打開調試器並讓瀏覽器告訴你,而不是我們其中的一個? (F12 = IE,Ctrl-Shift-I = Chrome,FF,Opera) – enhzflep 2013-04-10 19:03:55

+0

我是Javascript新手,我一直在爲此工作數天。我是自學成才的,所以我通過創建這個功能來嘗試和錯誤的方式。如果我可以自己解決,我不會註冊一個計算器帳戶,並在此張貼>。< – user2267371 2013-04-10 19:18:03

+0

不能爭辯「不會註冊一個SO帳戶並在此張貼」<「: - )_BUT_我會指出這個問題應該包含一個最小(但是完整的!)代碼片段來證明這個問題。在沒有看到數據的情況下看到事情真的有點難。 – enhzflep 2013-04-10 19:27:06

回答

0

您有兩個問題。首先是您在狀態選擇字段中使用onSelect而不是onChange。然而,更大的問題在於你正在檢查狀態的功能。您正在使用作業=而不是比較==

if (selection == 'CA') {  
    ttotal += tax * stotal; 
} 
if (selection == 'else') { 
    ttotal = 0; 
} 

固定jsFiddle example

+0

<3完美,謝謝!我會永遠不會抓到:) – user2267371 2013-04-10 23:41:33