在javascript中跳过特定条件

时间:2016-11-09 11:02:05

标签: javascript jquery function

我正在尝试制作一个javascript价格计算器,它从一个不包含文本字段但只包含单选按钮和复选框的表单中获取值。这是我的JavaScript:

service = 0;

var setPoint = function (elem) {
    var $e = $(elem);
    var points = $e.attr("data-points");
    switch ($e.attr("name")) {
        case 'group1':
            group1 = parseFloat(points);
        case 'group2':
            group2 = parseFloat(points);
        case 'group4':
            group4 = parseFloat(points);
        case 'group5':
            group5 = parseFloat(points);
        case 'services':
            if ($(elem).attr('checked1') == 'true') {
                $(elem).attr("checked1", "false");
                service = parseFloat(service) - parseFloat(points);
            } else {
                $(elem).attr("checked1", "true");
                service = parseFloat(service) + parseFloat(points);
            }
    }
}

var calculatePoints = function () {    
    var total;    
    var values = [group1, group2, group4, group5, service];

    values.map(function (value) {
        if (value == "" || value == undefined || value == NaN) {
            value = 0;
            return value;
        }
    });

    if (service == 0) {
        window.alert("At least one service needs to be selected!");
        console.log("Service = 0");
    } else if (service <= 20) {
        total = group1 + group2 + group4 + group5 + service;
    } else if (service > 20 && service <= 40) {
        total = group1 + group2 + group4 + group5 + (service * 0.8);
    } else total = group1 + group2 + group4 + group5 + (service * 0.7);

    console.log(total * 1000);

    return false;
}

但不知何故,条件语句if (service==0)根本不起作用!

我在每次单击表单字段时使用onclick方法调用setPoints函数,并使用onsubmit在calculatePoints函数中调用。我确保在使用onsubmit时页面没有刷新。

我不知道我的代码有什么问题以及为什么会发生这种情况,所以解释一下我的解决方案会对我有所帮助。您可以在此处找到包含完整代码的codepen:http://codepen.io/anshap1719/pen/pNjepV

4 个答案:

答案 0 :(得分:2)

尝试使用break语句结束每个案例到开关案例中。

switch ($e.attr("name")) {
    case 'group1':
        group1 = parseFloat(points);
        break;
    case 'group2':
        group2 = parseFloat(points);
        break;
    case 'group4':
        group4 = parseFloat(points);
        break;
    case 'group5':
        group5 = parseFloat(points);
        break;
    case 'services':
        if ($(elem).attr('checked1') == 'true') {
            $(elem).attr("checked1", "false");
            service = parseFloat(service) - parseFloat(points);
        } else {
            $(elem).attr("checked1", "true");
            service = parseFloat(service) + parseFloat(points);
        }
        break;
}

答案 1 :(得分:0)

您只需要使用初始化变量group1 ... group5以及使用service初始化变量,因此,如果任何单选按钮是没有选择,不是为了得到你的控制台错误,如下:

service = group1 = group2 = group3 = group4 = group5 = 0;

答案 2 :(得分:0)

应该是

if ($(elem).attr('checked1') === 'true') {
    // Code here, use triple === for conditional equality check
}

答案 3 :(得分:0)

检查控制台是否存在错误,因为它表示未定义group1。 您尚未定义在switch中使用的变量。

var service = 0, group1=0.0, group2=0.0, group4=0.0, group5=0.0;

这将为您提供所需的输出。