Javascript 函数调用自身重复

Javascript 函数调用自身重复,javascript,javascript-events,function-calls,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; f

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

var randomNo1=Math.floor(Math.random()*10);
var randomNo2=Math.floor(Math.random()*10);
window.onload=询问;
函数ask()
{
警报(“多少次”+randomNo1+“次数”+randomNo2+“?”);
}
函数问题()
{
var乘积=随机数1*随机数2;
var stdAnswer=document.getElementById('answer').value;
if(stdAnswer==产品)
{
警惕(“非常好!”)
//生成新编号
randomNo1=Math.floor(Math.random()*10);
randomNo2=数学地板(数学随机()*10);
问();
}
其他的
{
警告(“否,请重试”);
问();
}
}
输入答案:

您调用它两次,一次在启动时调用
window.onload=ask和问题中的一次

[编辑]
还要注意,您没有
question()


[/edit]

你调用它两次,一次在启动时调用
window.onload=ask和问题中的一次

[编辑]
还要注意,您没有
question()


[/edit]

您的表单没有
方法
也没有
操作
。当您单击
submit
按钮时,页面会自动刷新,从而再次触发
ask

您的表单将不作为
方法
操作
。当您单击
submit
按钮时,页面会自动刷新,从而再次触发
ask

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

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

因为您的按钮是提交按钮。单击时,它运行单击处理程序(如果指定),然后发布表单。因此,您需要调用两次
ask()
。一次在单击处理程序中,另一次在
窗口中。onload
处理程序

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


您可以在这里看到:

因为您的按钮是提交按钮。单击时,它运行单击处理程序(如果指定),然后发布表单。因此,您需要调用两次
ask()
。一次在单击处理程序中,另一次在
窗口中。onload
处理程序

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

您可以在这里看到:

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

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

输入答案:
​
操作=“#”添加到表单中,以避免在提交表单时刷新页面

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

输入答案:
​

您有一个带有
提交
按钮的
表单
。如果表单中没有任何操作,它将重新提交页面。你可以停止这一切

<input type="submit" value="Check" onClick="question();return false" />

您有一个带有
提交
按钮的
表单
。如果表单中没有任何操作,它将重新提交页面。你可以停止这一切

<input type="submit" value="Check" onClick="question();return false" />


如果我犯了错误,请指出。什么叫“自己打两次电话”?这是如何体现的?单击表单上的“检查”按钮时,函数“ask()”会被调用两次。因为在windows上也会调用ask。onload?函数对我来说只触发一次:
ask
请指出我是否犯了一些错误。什么叫“自己调用两次”?这是如何体现的?当单击表单上的“检查”按钮时,函数“ask()”会被调用两次。因为ask在windows.onload上也会被调用?我认为
ask
函数只会触发一次:我认为“window.onload=ask;”只会在第一次加载时调用该函数。不是吗?缺少分号根本不是问题。我认为“window.onload=ask;”只会在第一次加载时调用函数。不是吗?缺少分号根本不是问题。好的,我理解在这个场景中由“提交”引起的问题。非常感谢。
action=“#”
将表单提交给自身,这会导致相同的现象。页面已刷新。您需要取消表单提交。好的,我理解此场景中“提交”导致的问题。非常感谢。
action=“#”
将表单提交给自身,这会导致相同的现象。页面已刷新。您需要取消表单提交。