0

我在应该是一个非常简单的计算中遇到了一个奇怪的问题。单击复选框时addDomain,页面会向 php 后端发出 ajax 请求,其中新的小计是根据传递的参数确定的。首次选中复选框时,一切正常(即返回新的总和)。如果随后未选中该复选框,则再次触发请求,但从某处的加法返回一个总和,而不是减法的乘积。

这是我正在使用的代码。我想要做什么应该很简单。

case 'domainprices':
    $sub = request_var('s', 0.00);
    $checked = request_var('c', true);
    $price = (float) 10.99;

    if($checked){
        $sub = $sub + $price;
    }else{
        $sub = $sub - $price;
    }
    $res['res'] = $sub;
    echo json_encode($res);
break;

case 'hosting':
$id = request_var('id', '');
switch($id){
    case 'economy':
        $res['body'] = '<div>
            <select name="duration">
                <option value="3">3 years @ $2.99/Mo</option>
                <option value="2">2 years @ $3.99/Mo</option>
                <option value="1">1 year @ $4.99/Mo</option>
                <option value="0">1 month @ $5.99/Mo</option>
            </select><br />
            Add Domain Name: <input type="checkbox" name="addDomain" /><br />
            Subtotal: $<span id="subtotal">107.64</span>
        </div>
        <script>
        $("select[name=duration]").change(function(){
            var duration = $(this).val();
            var checked;
            if($("input[name=addDomain]").is(":checked")){
                checked = true;
            }else{
                checked = false;
            }
            Funcs.ajaxCall("services", "mode=hostingprices&d="+duration, function(data){
                $("#subtotal").html(data.result);
            });
        });
        $("input[name=addDomain]").mousedown(function(){
            var subtotal = $("#subtotal").html();
            var checked;
            if($(this).is(":checked")){
                checked = false;
            }else{
                checked = true;
            }
            Funcs.ajaxCall("services", "mode=domainprices&s="+subtotal+"&c="+checked, function(data){
                $("#subtotal").html(data.res);
            });
        });
        </script>';
        $res['name'] = "Economy Hosting";
        echo json_encode($res);
    break;
}
break;
4

0 回答 0