0
    <input type="text" name="importo_estratto" />
    <input type="text" name="numeri_giocati" />
    <input type="submit" id="submit" name="submit" />
$(document).ready(function() {
    $('input[name=submit]').click(function() {
        var importo_estratto = $('input[name=importo_estratto]').val();
        var numeri_giocati = $('input[name=numeri_giocati]').val();

        // ESTRATTO
        if (importo_estratto != '') {
            switch(numeri_giocati) {
                case 1: paga = 11.23; break;
                case 2: paga = 5.62; break;
                case 3: paga = 3.74; break;
                case 4: paga = 2.81; break;
                case 5: paga = 2.25; break;
                case 6: paga = 1.87; break;
                case 7: paga = 1.60; break;
                case 8: paga = 1.40; break;
                case 9: paga = 1.25; break;
                case 10: paga = 1.12; break;
            }

            /*if (numeri_giocati == 1) {
                var paga = 11.23;
            } else if (numeri_giocati == 2) {
                var paga = 5.62;
            } else if (numeri_giocati == 3) {
                var paga = 3.74;
            } else if (numeri_giocati == 4) {
                var paga = 2.81;
            } else if (numeri_giocati == 5) {
                var paga = 2.25;
            } else if (numeri_giocati == 6) {
                var paga = 1.87;
            } else if (numeri_giocati == 7) {
                var paga = 1.60;
            } else if (numeri_giocati == 8) {
                var paga = 1.40;
            } else if (numeri_giocati == 9) {
                var paga = 1.25;
            } else if (numeri_giocati == 10) {
                var paga = 1.12;
            }*/

            alert(paga);
        } else {
            var tot_estratto = 0;
        }
        return false;
    });
});

あなたの助けが必要です。理由はわかりませんが、IF は機能しますが、SWITCH は機能しません。アラートは値「paga」ではなく「undefined」を出力しますが、すべて問題ないようです。

誰か助けてくれませんか?どうもありがとうございました

4

4 に答える 4

6

numeri_giocati を数値にすると、文字列として取得され、switch が数値との一致に失敗します。単項+演算子で数値化できます。単項プラスを使用する代わりにparseFloat()orを使用することもできます。parseInt()

ライブデモ

switch(+numeri_giocati) {
                case 1: paga = 11.23; break;
                case 2: paga = 5.62; break;
                case 3: paga = 3.74; break;
                case 4: paga = 2.81; break;
                case 5: paga = 2.25; break;
                case 6: paga = 1.87; break;
                case 7: paga = 1.60; break;
                case 8: paga = 1.40; break;
                case 9: paga = 1.25; break;
                case 10: paga = 1.12; break;
            }
于 2012-07-21T17:27:44.690 に答える
2

アルゴリズムソリューション

pagaの記載された値で、アルゴリズムによる解決策が利用可能であることに誰も気づいていません。

numeri_giocati> 0の場合、の値pagaは次の式で与えられます。

  • paga = 11.23 / numeri_giocati

これが、アルゴリズムが正しい値を与えることの私の検証です(numeri_giocati = 1から10の範囲で小数点以下2桁まで)。

このアルゴリズムは、javascript関数を使用して実装できますgenPaga(seme, n)。ここで、semeはシード(またはスカラー)値11.23であり、nは正の整数です。

したがって、質問のコードは次のようになります。

$(document).ready(function() {
    function genPaga(seme, n) {
        return (seme / n).toFixed(2);
    }

    $('input[name=submit]').click(function() {
        var importo_estratto = $('input[name=importo_estratto]').val();
        var numeri_giocati = parseInt($('input[name=numeri_giocati]').val(), 10);
        var paga, tot_estratto;//??
        if (importo_estratto != '' && !isNaN(numeri_giocati) && numeri_giocati >= 1) {
            paga = genPaga(11.23, numeri_giocati);
        } else {
            tot_estratto = 0;
        }
        return false;
    });
});

このアプローチの利点は、switch/caseステートメントにハードコーディングされた値の範囲に制限されないことです。ある日、numeri_giocati = 11、12、13などに対応したいとします。アルゴリズムはそれを自動的に処理します。この関数genPaga()は、必要に応じてコードの他の場所で呼び出すこともできます。

制限は、アルゴリズムに拘束されることです。アルゴリズムが利用できなかった(または推測できなかった)場合は、スイッチ/ケースが唯一の選択肢である可能性があります。

于 2012-07-21T21:54:07.243 に答える
2

switchJavaScript のステートメントは型変換を実行しません。

switch(numeri_giocati) {
    case '1': paga = 11.23; break;
    case '2': paga = 5.62; break;
    case '3': paga = 3.74; break;
    case '4': paga = 2.81; break;
    case '5': paga = 2.25; break;
    case '6': paga = 1.87; break;
    case '7': paga = 1.60; break;
    case '8': paga = 1.40; break;
    case '9': paga = 1.25; break;
    case '10': paga = 1.12; break;
}

または、

var foo = parseInt(numeri_giocati);
switch(foo) {
    case 1: paga = 11.23; break;
    case 2: paga = 5.62; break;
    case 3: paga = 3.74; break;
    case 4: paga = 2.81; break;
    case 5: paga = 2.25; break;
    case 6: paga = 1.87; break;
    case 7: paga = 1.60; break;
    case 8: paga = 1.40; break;
    case 9: paga = 1.25; break;
    case 10: paga = 1.12; break;
}
于 2012-07-21T17:26:43.060 に答える
0

var pagaスイッチの前に定義してnumeri_giocati数値にする必要があります

このような:

$(document).ready(function() {
    $('input[name=submit]').click(function() {
        var importo_estratto = $('input[name=importo_estratto]').val();
        var numeri_giocati = $('input[name=numeri_giocati]').val();

        // ESTRATTO
        var paga = 0;
        if (importo_estratto != '') {
            switch(+numeri_giocati) {
                case 1: paga = 11.23; break;
                case 2: paga = 5.62; break;
                case 3: paga = 3.74; break;
                case 4: paga = 2.81; break;
                case 5: paga = 2.25; break;
                case 6: paga = 1.87; break;
                case 7: paga = 1.60; break;
                case 8: paga = 1.40; break;
                case 9: paga = 1.25; break;
                case 10: paga = 1.12; break;
            }

            /*if (numeri_giocati == 1) {
                var paga = 11.23;
            } else if (numeri_giocati == 2) {
                var paga = 5.62;
            } else if (numeri_giocati == 3) {
                var paga = 3.74;
            } else if (numeri_giocati == 4) {
                var paga = 2.81;
            } else if (numeri_giocati == 5) {
                var paga = 2.25;
            } else if (numeri_giocati == 6) {
                var paga = 1.87;
            } else if (numeri_giocati == 7) {
                var paga = 1.60;
            } else if (numeri_giocati == 8) {
                var paga = 1.40;
            } else if (numeri_giocati == 9) {
                var paga = 1.25;
            } else if (numeri_giocati == 10) {
                var paga = 1.12;
            }*/

            alert(paga);
        } else {
            var tot_estratto = 0;
        }
        return false;
    });
});
于 2012-07-21T17:26:25.420 に答える