即使条件成立,Javascript Switch案例也不起作用

时间:2013-05-18 20:33:55

标签: javascript

正如我以前的问题,我没有得到任何解决我问题的答案,我决定发布我的整个代码来确定问题。问题是当按下按钮时,即使三个图像中的一个是相同的(例如等于所有其他图像)(三个1出现,或者出现三个2),我没有输入我在程序中输入的消息,没有发生的情况。

这是我原来的问题(Switch case not working for Images stored in array

HTML:

<html>

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Untitled Document</title>
    </head>

    <body>
        <form name=slots onSubmit="rollem(); return false;">
            <tr>
                <th align=right>UserTokens:</th>
                <td align=left>
                    <input type=box size=5 name=UserTokens READONLY value=25>
                </td>
            </tr>
            <tr>
                <th align=right>Your bet:</th>
                <td align=left>
                    <input type=box size=5 name=bet>
                </td>
            </tr>
            <tr>
                <th>
                    <input type=submit value="Spin the slots">
                </th>
                <center>
                    <table cellspacing=5 cellpadding=2 border=0>
                        <tr>
                            <td>
                                <img src=number1test.gif name=slot1>
                            </td>
                            <td>
                                <img src=number2test.gif name=slot2>
                            </td>
                            <td>
                                <img src=number3test.gif name=slot3>
                            </td>
                        </tr>
                    </table>
                    <input type=text readonly size=33 name=banner>
                    </td>
            </tr>
        </form>
    </body>

</html>

</html>

我的JS(在<body>末尾):

slotitem = new Array('number1test', 'number2test', 'number3test'); // create array for each slot item image

tokens = 100; // starting tokens

function stopplay() { // call function

    if (document.slots.UserTokens.value < tokens) // if usertokens are less than value..
    {
        alert("You lost all your tokens")

    } else // otherwise, how much the user gained
    {
        alert("You gained " + (document.slots.UserTokens.value - tokens) + " Token pieces.   ");
    }
}

function rollem() {

    if (Math.floor(document.slots.UserTokens.value) < Math.floor(document.slots.bet.value)) {
        alert("Your bet is larger than your token amount")

    }

    if (document.slots.bet.value > 1) {
        document.slots.banner.value = "Bet is " + document.slots.bet.value + " UserTokens pieces";
    } else {
        document.slots.banner.value = "Bet is " + document.slots.bet.value + " UserTokens piece";
    }

    counter = 0;
    spinem();

}

function spinem() { // speed of randomly generated pictures

    turns1 = 10 + Math.floor((Math.random() * 5))

    for (a = 0; a < turns1; a++)

    {
        document.slots.slot1.src = "" + slotitem[a % 3] + ".gif";
    }

    turns2 = 10 + Math.floor((Math.random() * 5))

    for (b = 0; b < turns2; b++)

    {
        document.slots.slot2.src = "" + slotitem[b % 3] + ".gif";
    }

    turns3 = 10 + Math.floor((Math.random() * 5))

    for (c = 0; c < turns3; c++)

    {
        document.slots.slot3.src = "" + slotitem[c % 3] + ".gif";
    }

    counter++;

    if (counter < 25) {
        setTimeout("spinem(counter);", 50);
    } else {
        checkmatch();
    }

}

function checkmatch() {
    // the problem is here, where the cases seem to never happen, the program just goes to the else statement, and when one case is true on the webpage, it doesnt display anything(Nor the else statement)
    if ((document.slots.slot1.src == document.slots.slot2.src && document.slots.slot2.src == document.slots.slot3.src))
        switch (document.slots.slot1) {
        case "number1test":
            document.slots.banner.value = ("You got 3 in a row for 1's") // Do stuff
            break;
        case "number2test":
            document.slots.banner.value = ("You got 3 in a row for 2's")
            break;
        case "number3test":
            document.slots.banner.value = ("You got 3 in a row for 3's")
            break;
    } else {
        document.slots.UserTokens.value = document.slots.UserTokens.value - document.slots.bet.value;
        document.slots.banner.value = "No match - You lost " + document.slots.bet.value + " Token piece(s)";
    }
}

2 个答案:

答案 0 :(得分:1)

我看到你在哪里设置document.slots.slot1.src =“number1test.gif”之类的,但是你在哪里设置document.slots.slot =“number1test”。

我的猜测是你正在接通错误的东西,加上使用错误的值。


好的,你想要一个更完整的答案。

第一,你的设计是错误的。你永远不应该使用像图像源文本那样易变的东西来确定事物是否相同。进行随机化时进行等效性测试,或者至少存储随机化结果以便以后进行交叉检查。将你的mod(%)移出源图像集,获取最终数字,检查这些数字,并设置你的“你赢了”和结果中的图像。

第二,你错误的设计是错误的,因为你没有使用你在第一时间设置的变量(你正在打开对象),然后你正在与你的值进行比较没有设置它(因为你忘了“.gif”和html可能添加的任何垃圾,因为它是一个链接)。

更好?

答案 1 :(得分:0)

添加

alert(document.slots.slot1.src);
switch()之前

,您将看到您正在检查的真实价值。您错过了扩展程序(.gif)和图片网址的第一部分(http://.../)。

我认为你应该在更改图像时记住插槽的值(在某些变量中),而不是从图像的src属性中读取它们。