2

ユーザーから数値を取得してグリッドにプロットする Web ページがあります。数値のセットを入力するときに使用される 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 は、ユーザーが数字を配置する 2 つの input:text です。数字の各セットに対応するカテゴリは、グリッドに 1 回しか表示されないため、指定された keyup イベント関数内の最初の関数になります。次は、両方の入力に値があることを確認してから、setGridPosition 関数を呼び出します。残りは 2 つの数値の合計を加算するだけで、2 つの入力のいずれかに値がない場合に関数がクラッシュしないようにします。

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 では常に機能し、IE8 では約 95% の確率で機能します (サポートが必要)。通常、9/11 セットの数字はグリッド上の位置を正しく生成します。

このコードに IE8 で問題があるものはありますか?

4

3 に答える 3

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 に答える
1

大げさな推測ですが、休憩も必要ありません。最後の default: ステートメント? スイッチのセット内のようであり、おそらくそれは、case 'whatever' で行う方法とほぼ同じように、別のケースにジャンプするようになっています: case 'yeah' : default ステートメントのブレークを追加してみてください。非常に複雑なアルゴリズムのように見えますが、うまくいけばそれが問題です。

于 2012-06-04T20:45:42.280 に答える