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”,但对我来说一切似乎都很好。

有人能帮助我吗?非常感谢你

4

4 回答 4

6

将 numeri_giocati 设为数字,将其视为字符串,并且 switch 无法与数字匹配。您可以通过一元 + 运算符使其编号。您也可以使用parseFloat()orparseInt()代替使用一元加号。

现场演示

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

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 回答
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 回答
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 回答