如何在另一个switch语句内部嵌套一个switch语句

7
我尝试在用户选择了两个下拉框后计算出一个报价值。看起来我需要两个switch语句,这种做法可行吗?(有比下面更多的可能值,为了清晰起见,我已将它们删除)
 var workOutQuote = function() {
        var value1 = $("#delivery_from_area").val();
        var value2 = $("#delivery_to_area").val();
        var val = '';
            switch (value1)
            { case '1':
                { switch (value2)
                    { case '1': val="90"; break; }
                    { case '2': val="80"; break; }
                    { case '3': val="70"; break; }
                }
            }
            { case '2':
                { switch (value2)
                    { case '1': val="80"; break; }
                    { case '2': val="90"; break; }
                    { case '3': val="70"; break; }
                }
            }
}

使用上述代码时,我遇到了错误:
Uncaught SyntaxError: Unexpected token case 

2
switch 后面的 {} 应该包含所有的 case,而不是在每个 case 后都关闭;switch(xxx) { case a: ... case b: ... } - Joachim Isaksson
4个回答

11

如果您不想调用所有情况,请使用BREAK。 否则,您将得到意外的结果。

 var workOutQuote = function() {
        var value1 = $("#delivery_from_area").val();
        var value2 = $("#delivery_to_area").val();
        var val = '';
            switch (value1){ 
            case '1':
                 switch (value2){
                     case '1': val="90"; break; 
                     case '2': val="80"; break; 
                     case '3': val="70"; break; 
                }

            break;
            case '2':
                 switch (value2){
                     case '1': val="80"; break; 
                     case '2': val="90"; break; 
                     case '3': val="70"; break; 
                }
                break;             
}

3

您正在使用 括号 作为案例条件,以下是来自您的代码的示例 { case '1': val="90"; break; }

    var value1 = '2';
    var value2 = '2';
    var val = '';
    switch (value1) {
        case '1':
            {
                switch (value2) {
                    case '1':
                        val = "90";
                        break;

                    case '2':
                        val = "80";
                        break;

                    case '3':
                        val = "70";
                        break;
                }
            }
        case '2':
            {
                switch (value2) {
                    case '1':
                        val = "80";
                        break;
                    case '2':
                        val = "90";
                        break;
                    case '3':
                        val = "70";
                        break;
                }
            }
    }

Demo


3
过度使用大括号会导致在 switch () 后的语句(这是 JavaScript 语法所要求的)提前结束。请调整为以下形式:
        switch (value1){
        case '1':
            switch (value2){
                case '1': val="90"; break;
                case '2': val="80"; break;
                case '3': val="70"; break;
            }
            break;            
        case '2':
            switch (value2){
                case '1': val="80"; break;
                case '2': val="90"; break;
                case '3': val="70"; break;
            }
            break;
       }

我已经在你外层的case之间加了一个 break;,因为当前你的第一个case会运行到下一个case。

我添加的最后一个break是为了清晰起见:许多人不包括这个。

1
不要在每个案例周围加括号:

        switch (value1)
        { case '1':
            { switch (value2)
                { case '1': val="90"; break; }
                { case '2': val="80"; break; }

应该是:

        switch (value1)
        { case '1':
            switch (value2) {
                 case '1': val="90"; break; 
                 case '2': val="80"; break; 
            }
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接