Повторение вызова функции - PullRequest
0 голосов
/ 26 марта 2012

Я только что начал 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 ]

2 голосов
/ 26 марта 2012

Добавьте action = "#" к вашей форме, чтобы избежать обновления страницы при отправке формы.

<form action="#">
Enter answer: <input type="text" id="answer" />
<input type="submit" value="Check" onClick="question()" />
</form>​
1 голос
/ 26 марта 2012

Потому что ваша кнопка является кнопкой отправки.При нажатии запускаются обработчики щелчков (если указаны), а затем отправляется форма.Итак, вы звоните ask() дважды.Один раз в обработчике кликов, а другой раз в обработчике window.onload.

После отправки этой формы страница просто перезагружается (поскольку с ней не связано действие).И обработчик onload снова запускается.

Вы можете увидеть это здесь: http://jsbin.com/ukusof.

1 голос
/ 26 марта 2012

Вы вызываете это дважды, один раз при запуске window.onload = ask; и один раз в question

[править]
обратите внимание, что у вас нет ; после первого alert() в question()
[/ Править]

0 голосов
/ 26 марта 2012

У вас есть form с кнопкой submit. Без действия в форме, он повторно отправляет страницу. Вы можете остановить это с помощью

<input type="submit" value="Check" onClick="question();return false" />
0 голосов
/ 26 марта 2012

Вы отправляете форму, которая снова загружает страницу, поэтому ask будет снова запущен при загрузке.

0 голосов
/ 26 марта 2012

Ваша форма как нет method, ни action. Когда вы нажимаете кнопку submit, страница обновляется сама, и снова запускается ask.

...