如果有效,请不要开关

时间:2012-07-21 17:23:01

标签: jquery

    <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 个答案:

答案 0 :(得分:6)

使numeri_giocati数字,它被视为字符串,并且开关无法与数字匹配。您可以通过一元+运算符对其进行编号。您也可以使用parseFloat()parseInt(),而不是使用一元加号。

<强> Live Demo

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;
            }

答案 1 :(得分:2)

JavaScript中的

switch语句不执行类型转换。

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;
}

答案 2 :(得分:2)

算法解决方案

没有人注意到,使用paga的规定值,可以使用算法解决方案。

对于numeri_giocati&gt; 0,paga的值由公式给出:

  • paga = 11.23 / numeri_giocati

Here's my verification该算法给出了正确的值(在范围numri_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()也可在代码中的其他位置调用。

限制是您受算法约束。如果算法不可用(或无法推断),那么开关/案例可能是唯一的选择。

答案 3 :(得分: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;
    });
});