0

JavaScriptを始めたばかりですが、問題が発生しています。関数を呼び出すスクリプトを作成しました。このスクリプトが自分自身を2回呼び出している理由はわかりません。

コードは次のとおりです。

<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

window.onload = ask;起動時と起動時の2回呼び出しますquestion

[編集] [/編集]の最初の後にアフターが
ないことにも注意してください;alert()question()

于 2012-03-26T19:40:39.147 に答える
1

あなたのボタンは送信ボタンだからです。クリックすると、クリックハンドラー(指定されている場合)が実行され、フォームが投稿されます。だからあなたはask()二度電話します。クリックハンドラーで1回、ハンドラーでもう1回window.onload

このフォームが送信された後、ページは単にリロードされます(関連するアクションがないため)。そして、onloadハンドラーが再び起動されます。

あなたはここでそれを見ることができます:http://jsbin.com/ukusof

于 2012-03-26T19:45:32.513 に答える
0

あなたのフォームはノーmethodでもaction。ボタンをクリックするsubmitと、ページが自動的に更新され、ask再度起動します。

于 2012-03-26T19:43:37.517 に答える
0

フォームを送信すると、ページが再度読み込まれるため、読み込み時にask再度起動されます。

于 2012-03-26T19:43:53.540 に答える
0

ボタンform付きです。submitフォームにアクションがない場合は、ページを再送信します。あなたはこれを止めることができます

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