2

我有一个我正在制作的掷硬币程序的循环。问题是它似乎很早就退出了。看一看。

$(function() {
    $('#rollDice').click(function() {

        var e = document.getElementById("diceSides");
        var diceSides = e.options[e.selectedIndex].text;
        var diceRolls = document.getElementById('rollCount').value;

        if (diceRolls.match(/^[\d]*$/ )) {      
            if (diceRolls == "")  {
                alert ("Please fill out all forms then try again.");

            } else {

                $('#diceRollContainer').slideDown('slow');

                for (i=0;i<diceRolls;i++) {
                    var randNum = Math.floor(Math.random()*diceSides)+1;
                    var rolls = ("You rolled a " + diceSides + " sided die " + diceRolls + " times, and got the numbers ");

                    rollMinOne = rolls - 1;
                    if (i == rollMinOne) {
                        var rolls = (rolls + randNum + ".");
                    }
                    var rolls = (rolls + randNum + ", ");

                }
                alert (rolls);
            }
        } else {
            alert ("Make sure you only enter numbers and no spaces, then try again.");
        }
    });
});

问题是程序在 for 循环似乎完成之前警告滚动。为什么要这样做?

4

2 回答 2

2

您在该代码中有几个错误,但解释您所看到的行为的一个错误是您将rolls每次通过循环的值重置为初始字符串。

一旦将那条线移出并获得更接近的值,但您也在计算rollsMinOnerolls,而不是diceRolls,如您所愿(这就是为什么选择好名字如此重要),这意味着 if 语句永远不会为真(因为字符串减去一个数字是值NaN“不是数字”,它不等于任何东西[甚至它本身!])。

那么唯一的功能(而不是样式或设计)问题是,即使您已经添加了一个带有句点的值,您也会在末尾附加一个逗号。

把它们放在一起:

    var rolls = ("You rolled a " + diceSides + " sided die " + diceRolls + " times, and got the numbers ");
    for (i=0;i<diceRolls;i++) {
        var randNum = Math.floor(Math.random()*diceSides)+1;

        rollMinOne = diceRolls - 1;
        if (i == rollMinOne) {
            rolls = (rolls + randNum + ".");
        } else {
            rolls = (rolls + randNum + ", ");
        }

尽管正如其他答案所提到的,有更简单、更快捷的方法可以获得相同的结果,但我觉得理解代码为什么不起作用很重要。

于 2012-04-12T03:50:01.453 回答
0

我感到无聊并实现了您的代码,这似乎只需最少的测试即可

<script>
    $(function() {
        $('#rollDice').click(function() {

            var diceSides = $('#dice-sides').val();
            var diceRolls = $('#roll-count').val();

            if (diceRolls.match(/^[\d]*$/ )) {      
                if (diceRolls == "")  {
                    alert ("Please fill out all forms then try again.");

                } else {
                    $('#output').text(
                        "You rolled a " + diceSides + 
                        " sided die " + diceRolls + 
                        " times, and got the numbers ");

                    for (i=0; i<diceRolls; i++) {

                        var randNum = Math.floor(Math.random()*diceSides)+1;

                        $('#output').append(randNum);
                    }
                }
            } else {
                alert ("Make sure you only enter numbers and no spaces, then try again.");
            }
        });
    });
</script>
<form onsubmit="return false;">
    <label>Sides</label>
    <input id="dice-sides" type="text" value="6">
    <label>Count</label>
    <input id="roll-count" type="text" value="1">
    <button id="rollDice">Roll</button>
</form>
Rolls
<div id="output"> 

</div>
于 2012-04-12T03:29:51.533 回答