Javascript jQuery:price不';t更新-它不';t正确减去(使用switch语句)

Javascript jQuery:price不';t更新-它不';t正确减去(使用switch语句),javascript,jquery,switch-statement,Javascript,Jquery,Switch Statement,我在这个网站上搜索了一些与我的问题类似的东西,但没有找到任何东西。如果有什么我错过了,请给我的链接,我会看看它 我有一个表格,其中虚拟预订的总价格根据酒店价格+计算(人数*游览价格)。最终用户选择的短途旅行越多,价格上涨越多。到目前为止,一切顺利。我的问题是,比如说,我检查了超过1次的偏移,然后改变主意,取消了其中一次(或2次),我的jQuery代码的减法部分由于某种原因无法工作。它将继续增加价格,除非还有一次行程-如果你取消选中它,它将减去 该表单是一个PHP表单,从数据库中检索所有酒店和游览

我在这个网站上搜索了一些与我的问题类似的东西,但没有找到任何东西。如果有什么我错过了,请给我的链接,我会看看它

我有一个表格,其中虚拟预订的总价格根据酒店价格+计算(人数*游览价格)。最终用户选择的短途旅行越多,价格上涨越多。到目前为止,一切顺利。我的问题是,比如说,我检查了超过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);
    }
});