函数调用重复自身

时间:2012-03-26 19:37:04

标签: javascript javascript-events function-calls

我刚开始使用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>

6 个答案:

答案 0 :(得分:2)

在表单中添加 action =“#”,以避免在提交表单时刷新页面。

<form action="#">
Enter answer: <input type="text" id="answer" />
<input type="submit" value="Check" onClick="question()" />
</form>​

答案 1 :(得分:1)

您可以在启动时window.onload = ask;调用一次,在question

调用一次

[编辑]
另请注意,在;中的第一个alert()后,您没有question() [/编辑]

答案 2 :(得分:1)

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

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

您可以在此处查看:http://jsbin.com/ukusof

答案 3 :(得分:0)

您的表单为methodaction。当您点击submit按钮时,页面会自行刷新,从而再次触发ask

答案 4 :(得分:0)

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

答案 5 :(得分:0)

您有formsubmit按钮。如果表单中没有操作,则重新提交页面。您可以使用

停止此操作
<input type="submit" value="Check" onClick="question();return false" />