Javascript-redirect auf Formular Absenden-je nach input
Arbeite ich an einer einfachen javascript-quiz, und ich kann nicht für das Leben von mir bekommen Sie Javascript, um das Formular senden, und öffnen Sie das Ergebnis auf der gleichen Seite, egal ob ich Position.href, open.Fenster, oder, ob ich "_self" als Ziel. Scheint nicht egal, was ich mache...
JS:
function answer() {
var response = document.getElementById('answer').value;
if (response == "correctanswer")
location.href('right.html');
else
location.href('wrong.html');
}
HTML:
<form onSubmit="answer()" id="answer" target="_self">
<input type="text" maxlength="55" class="box" autofocus />
<input type="submit" class="submit" value="SUBMIT" />
</form>
So, was ich will, geschehen wird, wenn der Benutzer das Formular sendet, wird Sie gehen, um "right.html" wenn Sie eingegeben correctanswer in das Textfeld ein, oder "wrong.html" wenn Sie typisiert, etwas anderes.
Ich habe es läuft einwandfrei, bis auf die Tatsache, dass, egal was ich Tue, ich kann nicht auf die entsprechende Seite zu öffnen, in _self
, sondern in einem anderen Fenster. Jedes mal, wenn.
Gewesen fahrend mich verrückt die ganze Nacht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fünf Dinge:
Entfernen Sie die
target
Attributform
ganz. Die Standardeinstellung ist das gleiche Fenster. Obwohl es eigentlich egal ist, denn:Abbrechen der
submit
Veranstaltung durch Rücksendungfalse
in IhremonSubmit
, da Sie die Handhabung der form, in Ihren eigenen code. Eine einfache Möglichkeit dies zu tun ist, haben Sie Ihre Funktion zurückfalse
, und in deronSubmit
, Rückgabe des Ergebnisses des Aufrufs.Diese Zeile ist falsch:
form
Elemente haben keinvalue
. Sie wollen, um dieid
auf dieinput type="text"
element statt.Den
href
auflocation
ist keine Funktion, es ist eine Eigenschaft. Sie weisen Sie einfach darauf (oder einfach direkt zuordnen zu könnenlocation
).Ist das ein bisschen subtiler: Da haben Sie eine Globale Funktion, die aufgerufen wird
answer
, und Sie haben ein element mit einerid
"answer"
gibt es einen Konflikt: Beide wollen am Ende als Eigenschaften derwindow
Objekt (einer von vielen Gründen, die nicht die alten DOM0onxyz
Attribute — oder globalen Funktionen kommt). So müssen Sie ändern Sie den Namen von einem von Ihnen, z.B., ändern Sie die FunktioncheckAnswer
oder ähnliches.Also:
Und:
Vollständigen Beispiel: Live-Kopie | Live-Quelle
Ich würde empfehlen immer die Verwendung konsistente, nützlich Einrücken von code, und ich bin ein großer fan der immer mit Blöcken, nicht nur Aussagen, mit Kontroll-Strukturen.