切换语句循环记录错误的值

时间:2014-11-11 04:20:46

标签: javascript loops switch-statement

我有一个如下所示的开关语句:

subCatTDs = 8;

switch(subCatTDs){
    case 3:
        //Do some code
    case 2:
        //Do some code
    case 8:
        console.log(subCatTDs);
}

我将其从代码的其余部分简化为试图解决正在发生的问题。 subCatTDs确实被设置为不同的值(并且是更大循环的一部分)但是在这种情况下你会认为我在switch语句之前明确地声明了它的值并且控制台正在打印出来(就像我一样)说,它在一个循环中):

3
8

当我在声明之前直接设置值时,为什么会说'3'?

修改

以下是更多代码。对于更宏大的方案可能没有多大意义,但它可能会有所帮助(这是一个相当复杂的插件,所以很难在这里包含所有内容;如果您需要澄清任何内容,请告诉我):

for(i = 0; i < numberTRs; i++){
    var subCatValue = i + 1;
    var subCatRow = $('.subCatTable > tbody > tr:nth-child(' + subCatValue + ')');
    var subCatTDs = subCatRow.find('> td').length;

    //This used to be 5 now it's 4?
    switch(subCatTDs){
        case 3:
            //Subcat Title
            for(j = 0; j < subCatTDs; j++){
                    switch(j){
                    case 0:
                    case 2:
                        var nthChild = j + 1;
                        var subCatElement = $('.subCatTable tr:nth-child(' + subCatValue + ') td:nth-child(' + nthChild + ')');
                        var subCatTitle = subCatElement.html();
                        $('div#subcat-' + rowCounter + '-' + subCatCounter).append('<div class="subCatTitle">' + subCatTitle + '</div>');
                        subCatCounter++;
                        if(subCatCounter>subCatPerRow){
                            subCatCounter = 1;
                        }
                    }
            }
        case 2:
            //First time through

            //Second time through
            if(case2==true){
                        rowCounter++;
                        case2 = false;
                        continue;
            }

            case2 = true;

        case 8:
            console.log(subCatValue);
            for(j = 0; j < subCatTDs; j++){
                        switch(j){
                            case 0:
                            case 5:
                                        //Get the appropriate nth-child
                            var nthChild = j + 1;
                            var subCatElement = $('.subCatTable tr:nth-child(' + subCatValue + ') td:nth-child(' + nthChild + ')');
                            var subCatImage = subCatElement.html();
                                            $('div#subcat-' + rowCounter + '-' + subCatCounter).append('<div class="subCatImage">' + subCatTitle + '</div>');
                                            subCatCounter++;
                        if(subCatCounter>subCatPerRow){
                                                subCatCounter = 1;
                            }

                            case 3:
                            case 8:
                        var subCatDescrip = subCatElement.html();
                        $('div#subcat-' + rowCounter + '-' + subCatCounter).append('<div class="subCatImage">' + subCatDescrip + '</div>');
                        subCatCounter++;
                        if(subCatCounter>subCatPerRow){
                                                subCatCounter = 1;
                            }
                 }
            }               
        }
    }

编辑器上的格式化效果不佳。一切都不协调,但我想我已经接近了。不确定这是否有意义,但你看到我每次在for循环上循环时重置subCatTDs。它应该永远不会打印出'3',因为我只在检查8的情况后才使用console.log(),但出于某种原因它会这样做。

任何帮助都会很棒。谢谢!

1 个答案:

答案 0 :(得分:1)

您需要在每个案例结束时提供一个中断声明,否则处理将会#34;通过&#34;到下一个案例一直到最后。案例8中的打印将始终执行。