非常に単純な計算であるはずの奇妙な問題が発生しています。チェックボックスがクリックされる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;