为什么带脚本的Button有时不起作用?

时间:2016-10-30 21:48:47

标签: javascript html button

我使用Javascript创建了一个简单的脚本,它生成一个介于0-5 + 1之间的随机数(Dice。)我的问题是,当我按下按钮时,它没有任何一半时间强迫我将垃圾按钮多个骰子卷出现之前的时间。

我到处寻找,但找不到任何问题可能是什么问题。 这是我的代码:

<html>
<head>
</head>
<body>
<button type="button" onclick="spin()">Click here to roll the Dice!</button>
<img src="" id="demo">
<script>
function spin() {
        if (Dice() == 1) {
            document.getElementById("demo").src="http://i.imgur.com/QRTs9Ax.png";
        }
        else if (Dice() == 2) {
            document.getElementById("demo").src="http://i.imgur.com/OMz1o8U.png";
        }
        else if (Dice() == 3) {
            document.getElementById("demo").src="http://i.imgur.com/J4Xx2yO.png";
        }
        else if (Dice() == 4) {
            document.getElementById("demo").src="http://i.imgur.com/CJb2ojk.png";
        }
        else if (Dice() == 5) {
            document.getElementById("demo").src="http://i.imgur.com/8W6UL5O.png";
        }
        else if (Dice() == 6) {
            document.getElementById("demo").src="http://i.imgur.com/NGxBete.png";
        }
}

</script>
<script>
function Dice() {
    return Math.floor(Math.random() * 6) + 1;
}
</script>
</body>
</html>

5 个答案:

答案 0 :(得分:2)

因为Math.floor(Math.random() * 6) + 1;可以返回7

修改

Math.floor(Math.random() * 6) + 1;无法根据Mozilla Developers返回7,因为Math.random()不包含1Math.floor削减该值,以便您始终在16之间重复一次。

问题在于,使用if (Dice() == x)启动函数,因此它将为所有is语句返回不同的vaule。你必须像这样构建一个switch

function spin() {
  switch (Dice()) {
    case 1:
      document.getElementById("demo").src = "http://i.imgur.com/QRTs9Ax.png";
      break;
    case 2:
      document.getElementById("demo").src = "http://i.imgur.com/OMz1o8U.png";
      break;
    case 3:
      document.getElementById("demo").src = "http://i.imgur.com/J4Xx2yO.png";
      break;
    case 4:
      document.getElementById("demo").src = "http://i.imgur.com/CJb2ojk.png";
      break;
    case 5:
      document.getElementById("demo").src = "http://i.imgur.com/8W6UL5O.png";
      break;
    case 6:
      document.getElementById("demo").src = "http://i.imgur.com/NGxBete.png";
      break;
  }

答案 1 :(得分:1)

dice()的值存储一次到变量并使用if语句进行检查。您每次都重新生成该值,因此无法保证在检查时您将获得当前值。

此外,正如paolo所述,Math.floor(Math.random() * 6) + 1;可以返回7

<html>
<head>
</head>
<body>
<button type="button" onclick="spin()">Click here to roll the Dice!</button>
<img src="" id="demo">
<script>
function spin() {
    var dice = Dice();
        if (dice == 1) {
            document.getElementById("demo").src="http://i.imgur.com/QRTs9Ax.png";
        }
        else if (dice == 2) {
            document.getElementById("demo").src="http://i.imgur.com/OMz1o8U.png";
        }
        else if (dice == 3) {
            document.getElementById("demo").src="http://i.imgur.com/J4Xx2yO.png";
        }
        else if (dice == 4) {
            document.getElementById("demo").src="http://i.imgur.com/CJb2ojk.png";
        }
        else if (dice == 5) {
            document.getElementById("demo").src="http://i.imgur.com/8W6UL5O.png";
        }
        else if (dice == 6) {
            document.getElementById("demo").src="http://i.imgur.com/NGxBete.png";
        }
}

</script>
<script>
function Dice() {
    return Math.floor(Math.random() * 6) + 1;
}
</script>
</body>
</html>

答案 2 :(得分:1)

您尝试通过在地板之后将0增加+ 1来保持随机数返回Math.random()。但是,当1.0完全返回6时,您的乘法会产生6,它会被+ 1覆盖,然后会7添加5,它return Math.floor(Math.random() * 5) + 1;

相反,只需将Math.ceil()的随机数加倍。

return Math.ceil(Math.random() * 6);

或者,更简单地说,只需使用strcmp(thestring,F("knownstring"))即可。这将始终向上舍入到最接近的整数。

const PROGMEM char *

答案 3 :(得分:0)

你在其他所有if语句上调用Dice()函数。

我已经创建了a fiddle,您可以在控制台上看到已生成的号码,但您的旋转功能将如下所示:

function spin() {
  var number = Dice();
  console.log(number);
  switch (number) {
    case 1:
      document.getElementById("demo").src="http://i.imgur.com/QRTs9Ax.png";
      break;
    case 2:
      document.getElementById("demo").src="http://i.imgur.com/OMz1o8U.png";
      break;
    case 3:
      document.getElementById("demo").src="http://i.imgur.com/J4Xx2yO.png";
      break;
    case 4:
      document.getElementById("demo").src="http://i.imgur.com/CJb2ojk.png";
      break;
    case 5:
      document.getElementById("demo").src="http://i.imgur.com/8W6UL5O.png";
      break;
    case 6:
      document.getElementById("demo").src="http://i.imgur.com/NGxBete.png";
      break;
  }
}

此外,您可能会多次获得相同的号码,因为它是随机的。

答案 4 :(得分:0)

仅仅因为Dice()没有静态值并且可能会为每个if语句返回不同的值,也可能返回带有多个if的相同随机数。

因此,将生成的数字存储在变量中,然后根据需要执行if语句。

以下示例基于从imgs数组中选择随机图像,并应按照您的代码执行任务。

//add images what ever.
var imgs = [
            "http://i.imgur.com/QRTs9Ax.png",
            "http://i.imgur.com/OMz1o8U.png",
            "http://i.imgur.com/J4Xx2yO.png",
            "http://i.imgur.com/CJb2ojk.png",
            "http://i.imgur.com/8W6UL5O.png",
            "http://i.imgur.com/NGxBete.png"
            ];
    function spin() {
        var d = Dice(); //store the number in a variable
        //Dice(5); ===> if you want the max random number will be 5
        var i = d-1; //to get the right position in array
        if(imgs[i])document.getElementById("demo").src = imgs[i];
        //Also if you want additional statements use if(d == 1){}else if(d == 2){}
    }

    function Dice(max){
    max = max || imgs.length;
    return Math.floor(Math.random() * max) + 1;
    }