2012-03-26 10 views
0

Ich habe gerade Javascript gestartet und ich stehe vor einem Problem. Ich habe ein Skript geschrieben, in dem ich eine Funktion anrufe. Ich weiß nicht, warum dieses Skript sich zweimal nennt.Funktionsaufruf wiederholt sich

Der Code ist als Gebrüll:

<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> 
+0

stoppen Bitte weisen Sie darauf hin, wenn ich einen Fehler mache. –

+1

Was meinst du "sich selbst zweimal anrufen"? Wie manifestiert sich das? –

+0

Beim Klick auf den Button "Check" im Formular wird die Funktion "ask()" zweimal aufgerufen. –

Antwort

2

Fügen Sie action = "#" zu Ihrem Formular hinzu, um zu vermeiden, dass die Seite beim Senden des Formulars aktualisiert wird.

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

Ok Ich habe das Problem verstanden, das durch "submit" in diesem Szenario verursacht wird. Danke vielmals. –

+0

'action =" # "' übergibt das Formular an sich selbst, was zu demselben Phänomen führt. Die Seite wird aktualisiert. Sie müssen stattdessen die Formularübermittlung abbrechen. –

+0

Aber es löste das Peoblem. –

1

Sie es zweimal aufrufen, einmal beim Start window.onload = ask; und einmal in question

[Bearbeiten]
Notiz zu, dass Sie nicht über eine ; nach die erste alert() in question()
[/ edit]

+0

Ich denke" window.onload = ask; " ruft die Funktion nur beim ersten Laden auf. Ist es nicht? –

+1

Das fehlende Semikolon ist überhaupt kein Problem. –

+0

nein, aber es ist hässlich, sie hin und wieder zu überspringen – KevinDTimm

0

Ihre Form wie keine method noch action. Wenn Sie auf die Schaltfläche submit klicken, aktualisiert sich die Seite selbst und feuert erneut ask.

0

Sie senden das Formular, das die Seite erneut lädt, so dass ask erneut beim Laden ausgelöst wird.

1

Da Ihre Schaltfläche eine Absenden-Schaltfläche ist. Wenn darauf geklickt wird, werden Click-Handler ausgeführt (sofern angegeben), und das Formular wird dann veröffentlicht. Also rufst du ask() zweimal an. Einmal in einem Klick-Handler und ein weiteres Mal in einem window.onload Handler.

Nachdem dieses Formular übergeben wurde, wird die Seite einfach neu geladen (weil keine Aktion zugeordnet ist). Und onload Handler wird erneut ausgelöst.

Sie können es hier sehen: http://jsbin.com/ukusof.

0

Sie haben eine form mit einem submit Taste. Ohne Aktion im Formular wird die Seite erneut gesendet. Sie können dies mit

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