2

我有一个网页,它从用户那里获取数值并将它们绘制在网格上。下面是输入一组数字时使用的 jQuery 示例:

$('#c_per,#c_pot').keyup(function() {
        $('.ls_ref').each(function() {
            if($(this).text().search('C') > 0) {
                countDown(this.id);
            }
            $(this).text($(this).text().replace('C', ''));
        });
        if($('#c_per').val() > 0 && $('#c_pot').val() > 0) {
            setGridPosition('C',$('#c_per').val(),$('#c_pot').val());
        }
        var c_per = +$('#c_per').val() || 0;
        var c_pot = +$('#c_pot').val() || 0;
        $('#c_tot').val(c_per + c_pot);
    });

c_per 和 c_pot 是用户放置数字的两个输入:文本。每组数字对应的类别只能在网格中出现一次,因此是给定 keyup 事件函数中的第一个函数。接下来检查两个输入是否都有一个值,然后调用 setGridPosition 函数。其余的只是将两个数字的总和相加,并确保当两个输入之一中没有值时函数不会崩溃。

function setGridPosition(cat,per,pot) {
    var id = "ls_" + per + "_" + pot;
    $('#'+id).append(cat);
    var check = per + "-" + pot;
    switch(check) {
        case '1-1': case '2-1': case '1-2': case '2-2':
            counts.q_1 += 1;
            switch(check) {
                case '1-1':
                    priority_one_count.s_1_1++; break;
                case '2-1':
                    priority_one_count.s_2_1++; break;
                case '1-2':
                    priority_one_count.s_1_2++; break;
                case '2-2':
                    priority_one_count.s_2_2++; break;
            }    
            break;
        case '3-1': case '4-1': case '5-1': case '3-2': case '4-2': case '5-2':
            counts.q_2 += 1;
            switch(check) {
                case '3-1':
                    priority_two_count.s_3_1++; break;
                case '4-1':
                    priority_two_count.s_4_1++; break;
                case '5-1':
                    priority_two_count.s_5_1++; break;
                case '3-2':
                    priority_two_count.s_3_2++; break;
                case '4-2':
                    priority_two_count.s_4_2++; break;
                case '5-2':
                    priority_two_count.s_5_2++; break;
            }
            break;
        case '3-3': case '4-3': case '3-4':
            counts.q_3 += 1;
            switch(check) {
                case '3-3':
                    priority_three_count.s_3_3++; break;
                case '4-3':
                    priority_three_count.s_4_3++; break;
                case '3-4':
                    priority_three_count.s_3_4++; break;
            }
            break;
        case '5-3': case '4-4': case '3-5':
            counts.q_4 += 1; break;
        case '5-4': case '4-5': case '5-5':
            counts.q_5 += 1; break;
        default: counts.q_6 += 1;
    }
}

这个函数的大部分只是跟踪我需要编译的一些统计数据在哪里。不确定通过 switch 语句是否影响 IE8。

我试图让 jsfiddle.net 与这个网站一起工作,但我想不通。我有一个临时站点设置,您可以在其中查看完整版本。-链接已删除-

这段代码每次都可以在 Chrome 和 FireFox 上运行,大约 95% 的时间都可以在 IE8 上运行(需要支持)。通常 9/11 组数字会正确生成网格上的位置。

这段代码中有什么东西是 IE8 遇到的吗?

4

3 回答 3

1

一个疯狂的猜测,但你不需要休息吗?最后一个默认值:声明?就像在一组开关中一样,也许这使它跳转到另一个案例,就像您对案例“随便”所做的那样:案例“是的”:您可以尝试为默认语句添加中断吗?我看起来像一个非常复杂的算法,但希望这就是问题所在。

于 2012-06-04T20:45:42.280 回答
1

我发现 IE8 的 javascript 引擎会不一致地处理 $('#id').val() 数据类型。在处理它们之前,我将每个值解析为 Int ,这似乎修复了错误。

感谢大家看这个。抱歉,我无法正确运行它。

于 2012-06-05T16:52:56.223 回答
1

您是否尝试过简化 switch 语句?

    function setGridPosition(cat,per,pot) {
        var id = "ls_" + per + "_" + pot;
        $('#'+id).append(cat);
        var check = per + "-" + pot;
        switch(check) {
          case '1-1':   counts.q_1 += 1;  priority_one_count.s_1_1++; break;
          case '2-1':  counts.q_1 += 1;  priority_one_count.s_2_1++;  break;
          case '1-2':  counts.q_1 += 1;  priority_one_count.s_1_2++; break;
          case '2-2':  counts.q_1 += 1;  priority_one_count.s_2_2++;  break;


          case '3-1': counts.q_2 += 1; priority_two_count.s_3_1++; break;
          case '4-1': counts.q_2 += 1;   priority_two_count.s_4_1++; break;
          case '5-1': counts.q_2 += 1;  priority_two_count.s_5_1++; break;
          case '3-2': counts.q_2 += 1;  priority_two_count.s_3_2++; break;
          case '4-2':  counts.q_2 += 1;  priority_two_count.s_4_2++; break;
          case '5-2': counts.q_2 += 1; priority_two_count.s_5_2++; break;


          case '3-3': counts.q_3 += 1;  priority_three_count.s_3_3++; break;
          case '4-3': counts.q_3 += 1;  priority_three_count.s_4_3++; break;
          case '3-4':counts.q_3 += 1;  priority_three_count.s_3_4++; break;



           case '5-3':  counts.q_4 += 1; break;
           case '4-4':  counts.q_4 += 1; break;
           case '3-5':  counts.q_4 += 1; break;


           case '5-4':  counts.q_5 += 1; break;
           case '4-5':  counts.q_5 += 1; break;
            case '5-5':  counts.q_5 += 1; break;

            default: counts.q_6 += 1; break;
        }
    }

在不知道何时调用此函数以及真正用于什么的情况下很难。希望能引导您找到 IE 8 的问题 :)

于 2012-06-05T17:07:22.933 回答