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

在此先感谢您的帮助!

詹姆士

4

3 回答 3

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>
于 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

在这种情况下改变主意意味着首先撤消您所做的选择,然后再做出另一个选择。撤消第一个选择意味着减去您做出该选择时添加的数量。你永远不会减去任何地方。

你要做的是找到一种方法来记住第一选择是什么。为此,每个字段集一个变量就足够了。

于 2012-07-11T04:17:41.987 回答