Javascript jQuery:price不';t更新-它不';t正确减去(使用switch语句)
我在这个网站上搜索了一些与我的问题类似的东西,但没有找到任何东西。如果有什么我错过了,请给我的链接,我会看看它 我有一个表格,其中虚拟预订的总价格根据酒店价格+计算(人数*游览价格)。最终用户选择的短途旅行越多,价格上涨越多。到目前为止,一切顺利。我的问题是,比如说,我检查了超过1次的偏移,然后改变主意,取消了其中一次(或2次),我的jQuery代码的减法部分由于某种原因无法工作。它将继续增加价格,除非还有一次行程-如果你取消选中它,它将减去 该表单是一个PHP表单,从数据库中检索所有酒店和游览选项 为了做到这一点(分配的限制不允许我为这个特定部分使用插件),我使用以下代码:Javascript jQuery:price不';t更新-它不';t正确减去(使用switch语句),javascript,jquery,switch-statement,Javascript,Jquery,Switch Statement,我在这个网站上搜索了一些与我的问题类似的东西,但没有找到任何东西。如果有什么我错过了,请给我的链接,我会看看它 我有一个表格,其中虚拟预订的总价格根据酒店价格+计算(人数*游览价格)。最终用户选择的短途旅行越多,价格上涨越多。到目前为止,一切顺利。我的问题是,比如说,我检查了超过1次的偏移,然后改变主意,取消了其中一次(或2次),我的jQuery代码的减法部分由于某种原因无法工作。它将继续增加价格,除非还有一次行程-如果你取消选中它,它将减去 该表单是一个PHP表单,从数据库中检索所有酒店和游览
$(function() {
//other code snippets
$(".excursions").change(function() {
var x = $("#price").val();
var excursions = $(this).val();
var q = $("#quantity").val();
var quantity = parseInt(q);
var isChecked = $('.excursions').is(':checked');
if (isChecked) {
switch (excursions) {
case 'Extreme sports day (or 2 days) in Jarabacoa':
var y = parseFloat(x) + (parseFloat(1.000) * quantity);
$("#price").val(y.toFixed(3) + " DKK");
break;
case 'Hiking/Mountaineering at the Caribbean Alps':
var y = parseFloat(x) + (parseFloat(1.500) * quantity);
$("#price").val(y.toFixed(3) + " DKK");
break;
case 'Whale Watching and Visit to Salto El Limón':
var y = parseFloat(x) + (parseFloat(1.150) * quantity);
$("#price").val(y.toFixed(3) + " DKK");
break;
case 'Carnival at La Vega and La Vega City Tour':
var y = parseFloat(x) + (parseFloat(1.000) * quantity);
$("#price").val(y.toFixed(3) + " DKK");
break;
case '"Restaurant Crawl": Taste The Dominican Republic':
var y = parseFloat(x) + (parseFloat(1.500) * quantity);
$("#price").val(y.toFixed(3) + " DKK");
break;
case 'Gastronomy routes: coffee, chocolate, mango':
var y = parseFloat(x) + (parseFloat(1.000) * quantity);
$("#price").val(y.toFixed(3) + " DKK");
break;
}
} else {
switch (excursions) {
case 'Extreme sports day (or 2 days) in Jarabacoa':
var y = parseFloat(x) - (parseFloat(1.000) * quantity);
$("#price").val(y.toFixed(3) + " DKK");
break;
case 'Hiking/Mountaineering at the Caribbean Alps':
var y = parseFloat(x) - (parseFloat(1.500) * quantity);
$("#price").val(y.toFixed(3) + " DKK");
break;
case 'Whale Watching and Visit to Salto El Limón':
var y = parseFloat(x) - (parseFloat(1.150) * quantity);
$("#price").val(y.toFixed(3) + " DKK");
break;
case 'Carnival at La Vega and La Vega City Tour':
var y = parseFloat(x) - (parseFloat(1.000) * quantity);
$("#price").val(y.toFixed(3) + " DKK");
break;
case '"Restaurant Crawl": Taste The Dominican Republic':
var y = parseFloat(x) - (parseFloat(1.500) * quantity);
$("#price").val(y.toFixed(3) + " DKK");
break;
case 'Gastronomy routes: coffee, chocolate, mango':
var y = parseFloat(x) - (parseFloat(1.000) * quantity);
$("#price").val(y.toFixed(3) + " DKK");
break;
}
}
});
});
现场观看:
如果我删除了第二个Switch语句,那么如果我取消选中一个偏移,价格不会下降。
我做错了什么
提前谢谢
编辑添加:此问题的解决方案由Deryck提供。我接受了答案,因为我无法接受他的评论。新编辑:)
您的问题就在这里:
var isChecked = $('.excursions').is(':checked');
if (isChecked) {
....
您的变量isChecked
不是您认为的布尔值。如果选中其中一个偏移
框,将返回true。因此,即使删除一个或多个,它仍然认为为true
您可以做的一件事是将:选中的项的数量相加,并在每个输入上.change()
根据上一个数字验证该数字以确定加减
新jQuery为您服务!
var检查=0,
价格=0;
$('.offitions').change(函数(){
var currentChecks=$('.shiftions')。过滤器(':checked')。长度;
priceChange=parseFloat($(this).data('price');
如果(检查<当前检查){
价格+=价格变动;
$('').css('color','green').html('+$'+priceChange).appendTo('#total').fadeOut(1000,函数(){
$(this.remove();
});
检查=当前检查;
$('价格').html('价格');
}否则{
价格-=价格变动;
$('').css('color','red').html('-$'+priceChange).appendTo('#total').fadeOut(1000,函数(){
$(this.remove();
});
检查=当前检查;
$('价格').html('价格');
}
});
我真的很高兴我又看了一眼,已经过了几天了。我完全没有意识到我是从$(这个)
那里得到了检查项目的#哈哈
为了表示歉意,我也为您添加了一个$$add/subtract淡出功能
希望这比上一个有点帮助:)嗨,德里克,谢谢你的解释。我修改了代码,但现在它只做减法运算。看起来currentChecks永远不会超过0。我对代码进行了修改,但结果总是一样的。你可以在我原始帖子的链接上看到它。也谢谢你关于parseInt的提示。@Hola刚刚完全重新设计并为你修复了它。过来看!你是个天才!!!!我做了一些修改,因为需要进行额外的计算,但效果非常好!!!!!!!!!!!新年快乐,希望2014年对你来说是很棒的一年。非常感谢你的帮助
var checks = 0,
price = 0;
$('.excursions').change(function () {
var currentChecks = $('.excursions').filter(':checked').length;
priceChange = parseFloat($(this).data('price'));
if (checks < currentChecks) {
price += priceChange;
$('<span />').css('color', 'green').html('+$' + priceChange).appendTo('#total').fadeOut(1000, function () {
$(this).remove();
});
checks = currentChecks;
$('#price').html('$' + price);
} else {
price -= priceChange;
$('<span />').css('color', 'red').html('-$' + priceChange).appendTo('#total').fadeOut(1000, function () {
$(this).remove();
});
checks = currentChecks;
$('#price').html('$' + price);
}
});