我在一个非常简单的计算中遇到了一个奇怪的问题。单击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;