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で販売しましょう。サブ2を選択し、オプション2でサブ1を選択します...得られる合計は210です。これは正しいですが、気が変わってオプション2でサブ3を選択すると、答えはI持っている必要があります230ですが、私が得る合計は240です

よろしくお願いします!

ジェームズ

4

3 に答える 3

1

おそらく、少なくとも次の2つのことを行う必要があります。

  • priceに変更value
  • ラジオグループ名を追加する

他にもやりたいことがあるかもしれませんが、これら2つを実行するコードのかなり単純なポートを次に示します。実際のラジオボタンを関数に渡す必要がなくなったことに注意してください。毎回再計算します。これは、イベントリスナーをより高いレベルでアタッチすることで、おそらくより良い仕事をすることができ、マークアップで明示的なイベントリスナーのアタッチを行う必要がないことを意味します。

<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>
于 2012-07-11T04:11:23.453 に答える
1

ラジオがチェックされているかチェックされていないかを検出し、チェックされていない場合は減算する必要があります。変更してみてください。

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

if(radio.checked){
    total = parseInt(total) + parseInt(price);
}
else{
    total = parseInt(total) - parseInt(price);
}
于 2012-07-11T03:50:10.070 に答える
0

この場合、考えを変えるということは、最初に行った選択を元に戻し、次に別の選択を行うことを意味します。最初の選択を元に戻すということは、その選択を行ったときに追加された金額を差し引くことを意味します。どこにも引き算はありません。

あなたがしたいのは、最初の選択が何であったかを思い出す方法を見つけることです。その目的には、フィールドセットごとに1つの変数で十分です。

于 2012-07-11T04:17:41.987 に答える