0

我刚刚开始使用 JavaScript,我遇到了一个问题。我写了一个脚本,我在其中调用一个函数。我不知道为什么这个脚本会调用自己两次。

代码如下:

<html>
<head>

<script type="text/javascript">

var randomNo1 = Math.floor(Math.random()*10);
var randomNo2 = Math.floor(Math.random()*10);

window.onload = ask;

function ask()
{
    alert("How much " + randomNo1 + " times " + randomNo2 + "?");
}

function question()
{
    var product = randomNo1 * randomNo2;
    var stdAnswer = document.getElementById('answer').value;
    
    if(stdAnswer == product)
    {
        alert("Very good!")
        //generate new nos
        randomNo1 = Math.floor(Math.random()*10);
        randomNo2 = Math.floor(Math.random()*10);
        ask();
    }
    else
    {
        alert("No. Please try again.");
        ask();
    }
}
</script>

</head>

<body>
<form>
Enter answer: <input type="text" id="answer" />
<input type="submit" value="Check" onClick="question()" />
</form>
</body>
</html>
4

6 回答 6

2

action="#"添加到您的表单中,以避免在提交表单时刷新页面。

<form action="#">
Enter answer: <input type="text" id="answer" />
<input type="submit" value="Check" onClick="question()" />
</form>​
于 2012-03-26T19:46:30.693 回答
1

因为您的按钮是提交按钮。单击时,它会运行单击处理程序(如果指定),然后发布表单。所以你打ask()了两次电话。一次在点击处理程序中,另一次在window.onload处理程序中。

提交此表单后,页面只是重新加载(因为它没有关联的操作)。onload处理程序再次被解雇。

你可以在这里看到它:http: //jsbin.com/ukusof

于 2012-03-26T19:45:32.513 回答
1

你调用它两次,一次在启动时window.onload = ask;,一次在question

[edit]
还要注意,在 [/edit]中;的第一个之后没有alert()question()

于 2012-03-26T19:40:39.147 回答
0

你有一个formsubmit按钮的。表单中没有任何操作,它会重新提交页面。你可以用

<input type="submit" value="Check" onClick="question();return false" />
于 2012-03-26T19:50:46.553 回答
0

您正在提交表单,它会再次加载页面,因此ask将在加载时再次触发。

于 2012-03-26T19:43:53.540 回答
0

你的形式为 nomethodaction。当您单击submit按钮时,页面会自行刷新,从而ask再次触发。

于 2012-03-26T19:43:37.517 回答