注意,这不是我的代码,也不是表单中的实际代码。这只是我的测试版本,但确实代表了我想要做的事情。
鉴于以下代码,当取消选中该复选框时,如何让脚本减去传递的值:
<!DOCTYPE html>
<html lang="en">
<head>
<title>form test</title>
<script type="text/javascript" charset="utf-8" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js"></script>
<script type="text/javascript">
function updateAmount(amount) {
parseInt(amount);
if ($('#amount').val()) {
parseInt(amount);
amount = amount + parseInt($('#amount').val());
}
$('#amount').val(amount);
alert('Amount: ' + $('#amount').val());
}
</script>
</head>
<body>
<form action="" method="post" name="form-test">
<input onclick="updateAmount(150)" class="inputbox" id="reservationfee0"
value="Registration Fee" type="checkbox" />
<strong>$150</strong>Reservation Fee</form>
</body>
</html>
按照目前的情况,编写该功能的人没有考虑到人们可能在提交表单之前检查并取消选中该框(其中包括更多字段和其他在提交之前添加到金额变量中的数字)。由于这个原因,有一些关于过度收费的报告,所以我需要弄清楚如何阻止它发生,但我对javascript / jquery知之甚少。
答案 0 :(得分:2)
尝试:
function updateAmount(amount) {
$amount = $('#amount'); // cache for later use
if ($('#reservationfee0').is(':checked')) {
$amount.val(parseInt($amount.val(), 10) + amount);
} else {
$amount.val(parseInt($amount.val(), 10) - amount);
}
}
<强> Working example here 强>
这会检查checkbox
是否使用.is()
进行检查,如果是,则将金额添加到当前值中,如果没有将其减去。
另请注意,parseInt
需要第二个参数 - radix
,建议您包含此值以确定结果... docs for parseInt here
答案 1 :(得分:0)
function updateAmount(amount) {
parseInt(amount);
if ($('#reservationfee0').prop('checked')) {
amount = amount + parseFloat($('#amount').val());
}
else{
amount = parseFloat($('#amount').val())-amount;
}
$('#amount').val(amount);
alert('Amount: ' + $('#amount').val());
}
答案 2 :(得分:0)
我们可以做的是在我们可以第一次设置的函数上方定义一个变量。代码如下:
var chk=1;
function updateAmount(amount) {
parseInt(amount);
if ($('#amount').val() && document.getElementById('reservationfee0').checked && chk==1) {
chk=0;
parseInt(amount);
amount = amount + parseInt($('#amount').val());
}
$('#amount').val(amount);
alert('Amount: ' + $('#amount').val());
}