2012-07-11 75 views
0

希望有人能幫助我這個!得到了一個簡單的訂單清單,但如果有人點擊一個選項,但然後改變主意並點擊不同的選項,它只是不斷增加值...不知道如何解決它...代碼如下購物籃小計

<html> 
<head> 
<script> 
    total = 0; 
    function Update_Subtotal(radio){ 
     price = radio.getAttribute("price"); 
     total = parseInt(total) + parseInt(price); 
     document.getElementById("total").innerHTML = '£' + total; 
} 
</script> 
</head> 
<body> 
<form name="form" method="post" action=""> 
    <fieldset> 
     <legend>Option 1</legend> 
     <input type="radio" price="100" onclick="Update_Subtotal(this);" />Sub1 
     <input type="radio" price="200" onclick="Update_Subtotal(this);" />Sub2 
     <input type="radio" price="300" onclick="Update_Subtotal(this);" />Sub3 
    </fieldset> 
    <fieldset> 
     <legend>Option 2</legend> 
     <input type="radio" price="10" onclick="Update_Subtotal(this);" />Sub1 
     <input type="radio" price="20" onclick="Update_Subtotal(this);" />Sub2 
     <input type="radio" price="30" onclick="Update_Subtotal(this);" />Sub3 
</fieldset> 
</form> 
<div id="total"></div> 
</body> 
</html> 

現在讓我們出售選項1我選擇sub2然後在選項2我選擇sub 1 ...我得到的總數是210這是正確的,但是,如果我改變主意,並在選項2中選擇sub 3,我應該有的答案是230,但我得到的總數是240

在此先感謝您的幫助!

詹姆斯

回答

1

您需要檢測無線電是否已被選中或取消選中,並減去假如它一直不加以控制,嘗試改變:

total = parseInt(total) + parseInt(price); 

if(radio.checked){ 
    total = parseInt(total) + parseInt(price); 
} 
else{ 
    total = parseInt(total) - parseInt(price); 
} 
1

想必你需要做至少這兩件事:

  • 更改pricevalue
  • 追加單選組名稱

有可能是你想要做其他事情,但這裏是你的代碼的一個相當簡單的端口做這兩個。請注意,它不再要求您將實際的單選按鈕傳遞給該函數。它每次都會重新計算。這意味着您可能在更高級別上更好地附加事件偵聽器,而不必在標記中執行顯式事件偵聽器附件。

<html> 
<head> 
<script> 
    total = 0; 
    function Update_Subtotal() { 
     var inputs = document.forms.form.elements, total = 0;; 
     for (var i = 0, len = inputs.length; i < len; i++) { 
      var input = inputs[i]; 
      if (input.checked) { 
       total += parseFloat(input.value) || 0; 
      } 
     } 
     document.getElementById("total").innerHTML = '£' + total; 
} 
</script> 
</head> 
<body> 
<form name="form" method="post" action=""> 
    <fieldset> 
     <legend>Option 1</legend> 
     <input name="opt1" type="radio" value="100" onclick="Update_Subtotal();" />Sub1 
     <input name="opt1" type="radio" value="200" onclick="Update_Subtotal();" />Sub2 
     <input name="opt1" type="radio" value="300" onclick="Update_Subtotal();" />Sub3 
    </fieldset> 
    <fieldset> 
     <legend>Option 2</legend> 
     <input name="opt2" type="radio" value="10" onclick="Update_Subtotal();" />Sub1 
     <input name="opt2" type="radio" value="20" onclick="Update_Subtotal();" />Sub2 
     <input name="opt2" type="radio" value="30" onclick="Update_Subtotal();" />Sub3 
</fieldset> 
</form> 
<div id="total"></div> 
</body> 
</html> 
+0

這很好用,但是我的代碼在發佈時有點簡化。我已經添加了名稱attb,但是當我將表單傳遞給php腳本時,我已經使用attb的值。任何方式與我原來的價格attb做到這一點?我說它不會驗證,但我不擔心這一點。謝謝 – Chunky1318 2012-07-11 14:25:06

0

在這種情況下改變你的想法意味着首先取消你所做的選擇,然後再做一個選擇。撤銷第一選擇意味着減去您做出該選擇時添加的金額。你永遠不會減去。

你想要做的是找到一種方法來記住第一個選擇是什麼。每場設置一個變量就足夠了。