我尝试进行此简单的练习,但确实无法正常工作。单击按钮时,应该为您提供0到1000之间的随机数。再次单击该按钮时,它将创建另一个随机数,如果该随机数大于最后一个随机数,则会显示该随机数。如果不是,则不执行任何操作。在执行此操作的同时,它会计算运行该功能的次数。
我制作的数字确实给了我随机数字,但有时,它显示的数字小于最后一个数字,有时却没有。我不知道为什么。我怀疑这可能是因为我试图更改按钮的功能所在的代码行。

<!DOCTYPE html>
<html>
<head>
<input id="btn" type="button" onclick="initiate(1)" value="Click me!"><br>
<script>
function geid(id) {
    return document.getElementById(id);
}
var count = 0;

function initiate(n) {
    var x = n;
    n = Math.floor(Math.random() * 1000);
    document.getElementById("btn").onclick = function () {
        initiate(n);
    }

    if (n > x) {
        geid("fid").innerHTML = n;
        count += 1;
        geid("fid2").innerHTML = count + " times";

    } else {
        count += 1;
        geid("fid2").innerHTML = count + " times";

    }
}
</script>

</head>

<body>
Number : <div id="fid">0</div>
Tried <div id="fid2">0</div>

</body>

</html>

最佳答案

问题是,无论新选择的onclick值是否大于先前的值(n),都始终在更改x函数。

举个例子:假设语句Math.floor(Math.random()*1000);在多次运行时会产生以下值序列:100、500、200、300。

第一次单击时,该函数称为initiate(1),点fid1设置为保留100,onclick处理程序设置为调用initiate(100)

第二次单击时,该函数称为initiate(100),位置fid1设置为容纳500,onclick处理程序设置为调用initiate(500)。到现在为止还挺好。

第三次单击,该函数被称为initiate(500),点fid1500处保持不变,并且onclick处理程序被设置为调用initiate(200)。嗯...

第四次单击时,该函数称为initiate(200),位置fid1设置为保留300,onclick处理程序设置为调用initiate(300)

因此,问题在于,如果要更改处理程序以始终将当前值保存在fid1中,那么除非n > x,否则不应更改处理程序。

07-24 09:23