mehrere if-abfragen - Trennung nötig?
lousypoetry
- javascript
hallo!
ich hab eine funktion in der mehrere if-abfragen notiert sind im sinne eines kleinen vokabeltests quasi. Problem: ich hab den eindruck dass nur die letzte if-abfrage korrekt ausgeführt wird, denn selbst wenn "Haus" die Frage ist und ich "house" als antwort eingebe, erhalte ich ein "Falsch!" im Ergebnisfeld.
function pruefen()
{
var frage = window.document.testen.frage.value;
var antwort = window.document.testen.antwort.value;
if(frage=="Haus" && antwort=="house")
window.document.testen.ergebnis.value = "Richtig!";
else
window.document.testen.ergebnis.value = "Falsch!";
if(frage=="Küche" && antwort=="kitchen")
window.document.testen.ergebnis.value = "Richtig!";
else
window.document.testen.ergebnis.value = "Falsch!";
}
muss ich die if-abfragen vielleicht voneinander trennen? wo liegt der fehler?
Vielen Dank!
Hallo,
Problem: ich hab den eindruck dass nur die letzte if-abfrage korrekt ausgeführt wird, denn selbst wenn "Haus" die Frage ist und ich "house" als antwort eingebe, erhalte ich ein "Falsch!" im Ergebnisfeld.
function pruefen()
[...]
Wenn du deinen JS-Code Schritt für Schritt durchgehst, wirst du deine Vermutung bestätigt sehen. Sorge also dafür, dass beim ersten "Richtig" deine Funktion beendet wird oder überdenke das Konzept.
Torsten
hallo Torsten,
Wenn du deinen JS-Code Schritt für Schritt durchgehst, wirst du deine Vermutung bestätigt sehen.
Das ist richtig.
Sorge also dafür, dass beim ersten "Richtig" deine Funktion beendet wird
Und das stimmt nur bedingt. Es sollte aber jedes "if" und jedes "else" ordentlich in geschweifte Klammern gesetzt werden, nach dem Schema:
function xyz(){
if {
} else {
}
if {
} else {
}
}
Dann klappt das höchstwahrscheinlich. Natürlich kannst du auch für jede Voakbelabfrage eine eigene Funktion schreiben, das wäre mir aber zuviel Tipperei.
oder überdenke das Konzept.
Die kleine Andeutung des Konzepts, die hier zu lesen war, ergibt noch keinen Rückschluß, daß das in die verkehrte Richtung geht.
Grüße aus Berlin
Christoph S.
Hallo Christoph,
Sorge also dafür, dass beim ersten "Richtig" deine Funktion beendet wird
Und das stimmt nur bedingt.
Naja, wenn er die Funktio so ließe, wie sie ist, und lediglich an den entsprechenden Stellen mit einem return versähe (nämlich dann, wenn das Ergebnis "richtig" lautet), sollte es klappen. Dass dabei mehr Code als nötig rauskommt, ist denke ich logisch.
oder überdenke das Konzept.
Die kleine Andeutung des Konzepts, die hier zu lesen war, ergibt noch keinen Rückschluß, daß das in die verkehrte Richtung geht.
War ja nur eine Anregung, es vielleicht vom Konzept der Funktion her anders zu lösen, insoweit würde ich mich da an Tobias' Variante A orientieren.
Viele Grüße
Torsten
vielen dank erstmal, jetzt hab ich auch verstanden warum das script nicht so funktioniert wie ich es wollte.
ich habe das ganze erst mal mit einer switch-anweisung "gelöst", die ein default am ende hat, was das "falsch" ausgibt. zumindest funktioniert es jetzt, aber ich werd noch n bisschen rumprobieren!
hm, also nun das ganze mit switch(), und gestern ging es auch im IE, jetzt nur noch in Opera:
function pruefen()
{
var frage = window.document.testen.frage.value;
var antwort = window.document.testen.antwort.value;
switch(frage, antwort)
{
case "Haus" && "house":
window.document.testen.ergebnis.value = "Richtig!";
document.all.er.style.color ="#00FF00";
break;
case "Küche" && "kitchen":
window.document.testen.ergebnis.value = "Richtig!";
document.all.er.style.color ="#00FF00";
break;
default:
window.document.testen.ergebnis.value ="Falsch!";
document.all.er.style.color ="#FF0000";
break;
}
}
gibt immer die fehlermeldung " das objekt unterstützt diese methode nicht". kann mir da jemand helfen? eigentlich müsste das doch in beiden browsern laufen...
Hallo lousypoetry,
switch(frage, antwort)
das man bei switch zwei Variablen einsetzen kann, wäre mir neu... (in http://selfhtml.teamone.de/javascript/sprache/bedingt.htm#switch steht auch nichts von zwei Variablen) du wirst vermutlich bei einer der if-Lösungen bleiben müssen.
document.all.er.style.color ="#00FF00";
warum willst du nicht, dass es in Browsern != IE funktioniert?
Grüße aus Nürnberg
Tobias
Hallo lousypoetry,
Problem: ich hab den eindruck dass nur die letzte if-abfrage korrekt ausgeführt wird, denn selbst wenn "Haus" die Frage ist und ich "house" als antwort eingebe, erhalte ich ein "Falsch!" im Ergebnisfeld.
logisch:
if(frage=="Haus" && antwort=="house")
window.document.testen.ergebnis.value = "Richtig!";
du hast "Haus" als Frage und "house" als Antwort - also wird (da die if-Bedingung true wird) das ergebnis-Feld auf "Richtig!" gesetzt...
if(frage=="Küche" && antwort=="kitchen")
diese Bedingung wird aber false, also wird der else-Zweig ausgeführt, und im ergebnis-Feld steht "Falsch!".
muss ich die if-abfragen vielleicht voneinander trennen?
du könntest
a) am Anfang der Funktion das ergebnis-Feld auf "Falsch" setzen und nur wenn eine deiner if-Abfragen true ergibt auf "Richtig" (den else-Teil einfach weglassen)
b) die Funktion bei einer richtigen Antwort mit return verlassen
wobei ich aber Version a) vorziehen würde.
Grüße aus Nürnberg
Tobias
hallo Tobias,
es gibt noch eine andere Variante:
function pruefen() {
var frage = window.document.testen.frage.value;
var antwort = window.document.testen.antwort.value;
if(frage=="Haus" && antwort=="house")
window.document.testen.ergebnis.value = "Richtig!";
else if(frage=="Küche" && antwort=="kitchen")
window.document.testen.ergebnis.value = "Richtig!";
else if(frage=="Zimmer" && antwort=="room")
window.document.testen.ergebnis.value = "Richtig!";
[...]
else
window.document.testen.ergebnis.value = "Falsch!";
}
Wie man aber für "frage" jetzt die zulässigen Wörter definiert, ist ein anderes Problem. Ich würde so ein Projekt auch nicht mit Javascript zu realisieren versuchen - oder die Vokabellisten in zwei verschiedene Arrays packen.
Grüße aus Berlin
Christoph S.