Gå til innhold

Javascript: Kode gir feil resultat til feil tid


Anbefalte innlegg

Hei.

 

Jeg prøver å få nettsiden min til å kunne godta en input den ellers ikke ville godta, på hva som har hvert input fra en tidligere form, men uansett om jeg har gjort at den skal godta den type input eller ikke, så godtar den ikke inputen jeg skriver inn.

 

Variabelnavnet på variabelen som inneholder om den skal godta (ja) eller ikke godta (nei) er

godtaUtenTegn

og den skal av hva jeg ser godta den.

 

Her lagres infoen i variabelen (variabelen er definert som global tidligere i scriptet):

function validerForm() {
godtaUtenTegn = document.forms['start']['godtaUtenTegn'].value;
glosesett = document.forms['start']['glosesett'].value;
Frasprak = document.forms['start']['sprak'].value;
if (glosesett == 1) {
glosesettFra = 1;
glosesettTil = 71;
}
else if (glosesett == 2) {
glosesettFra = 72;
glosesettTil = 111;
}
nyttOrd()
}

 

Her er svar-funksjonen som skal finne ut om svaret er rett eller galt:

function svaret() {
brukerSvar=document.forms['ordet']['svar'].value;
if (fraSprak == 0 && (brukerSvar == spanskOrd || brukerSvar == SpanskOrd)) {
 resultat = "Helt riktig, " + norskOrd + " er " + spanskOrd + "!";
 antallRiktig += 1;
}
else if (fraSprak == 0 && (godtaUtenTegn == "ja" && (brukersvar == spanskOrdUten || brukersvar == SpanskOrdUten))) {
 resultat = "Helt riktig, " + norskOrd + " er " + spanskOrd + "!";
 antallRiktig += 1;
}
else if (fraSprak == 0 && ((brukerSvar != spanskOrd || brukerSvar != SpanskOrd) && (godtaUtenTegn == "nei" || (godtaUtenTegn == "ja" && (brukersvar != spanskOrdUten || brukersvar != SpanskOrdUten))))) {
   resultat = "Feil, " + norskOrd + " er " + spanskOrd + "!";
}
else if (fraSprak == 1 && (brukerSvar == norskOrd || brukerSvar == NorskOrd)) {
 resultat="Helt riktig, " + spanskOrd + " er " + norskOrd + "!";
 antallRiktig += 1;
}
else if (fraSprak == 1 && (brukerSvar != norskOrd || brukerSvar != NorskOrd)) {
 resultat="Feil, " + spanskOrd + " er " + norskOrd + "!";
}
if (merk != "null") {
 resultat = resultat + "<br><br><strong>Merk:</strong> " + merk;
}
antallTesterTatt += 1;
document.getElementById("svar").innerHTML=resultat + "<br><br>Du har nå " + antallRiktig + " av " + antallTesterTatt + " riktige!";
document.getElementById("ord").innerHTML='<button type="button" onclick="nyttOrd()">Nytt ord</button><br><br><br><br><button type="button" onclick="reload()">Start på nytt</button>';
return false;
}

 

Her er formen der man kan velge blant annet om man skal godta inputen som nå ikke vil godtas uansett:

<form name="start" action="">
<select name="godtaUtenTegn">
<option value="nei">Godta bare med evt. spesialtegn</option>
<option value="ja">Godta også uten evt. spesialtegn</option>

</select><br>
<select name="glosesett">
<option value="alle">Ta med alle glosesett</option>
<option value="1">Glosesett 1</option>
<option value="2">Glosesett 2</option>
</select><br><select name="sprak">
<option value="tilfeldig">Tilfeldig hvilket språk den tar fra</option>
<option value="0">Bare fra norsk</option>
<option value="1">Bare fra spansk</option>
</select><br><br></form><button type="button" onclick="validerForm()">Start</button>

 

PS: Hvis det er til noen hjelp, så legger jeg ved et utdrag av der det inputen brukersvar skal sjekkes opp mot lagres i variabler (hvilken case-del som velges bestemmes av en random-funksjon:

case 99:
   spanskOrd = "médico"
   SpanskOrd = "Médico"
   spanskOrdUten = "medico"
   SpanskOrdUten = "Medico"
   norskOrd = "lege"
   NorskOrd = "Lege"
   break;
case 100:
   spanskOrd = "mucho"
   SpanskOrd = "Mucho"
   spanskOrdUten = "mucho"
   SpanskOrdUten = "Mucho"
   norskOrd = "mye"
   NorskOrd = "Mye"
   break;

 

Håper noen finner ut av det, for jeg finner ikke ut av det.

Lenke til kommentar
Videoannonse
Annonse

Jeg har nå med prøving og feiling sett at det må ha noe med der den sjekker om den skal godta det, og om det da er riktig (

else if (godtaUtenTegn == "ja" && (brukersvar == spanskOrdUten || brukersvar == SpanskOrdUten)) {

), men aner absolutt ikke hvorfor den ikke vil godta det (den godtar det heller ikke når hvis jeg sier

if (godtaUtenTegn == "nei" && (brukerSvar == spanskOrd || brukerSvar == SpanskOrd)) {

(noe jeg bare prøvde for å prøve å se hva som skjedde).

 

 

Er dette til mer hjelp?

 

PS: Når jeg skriver

alert ("Her er dine innstillinger:\nGodta uten evt. spesialtegn: " + godtaUtenTegn + "\nGlosesett: " + glosesett + "\nSpråk fra: " + Frasprak);

så sier den at alle variablene er som forventet ifølge inputen.

Lenke til kommentar

Parentesene dine er ikke helt riktig her i forhold til hva du ønsker å gjøre:

((brukerSvar != spanskOrd || brukerSvar != SpanskOrd) && (godtaUtenTegn == "nei" || (godtaUtenTegn == "ja" && (brukersvar != spanskOrdUten || brukersvar != SpanskOrdUten))))

 

Kan være en fordel å dele opp en lang if streng over flere linjer, slik at det blir enklere å se hva som hører sammen.

 

else if (fraSprak == 0 && (
 ((brukerSvar != spanskOrd || brukerSvar != SpanskOrd) && godtaUtenTegn == "nei")
 ||
 ((brukersvar != spanskOrdUten || brukersvar != SpanskOrdUten) && godtaUtenTegn == "ja" )
)) {
resultat = "Feil, " + norskOrd + " er " + spanskOrd + "!";
}

Endret av Crowly
Lenke til kommentar

Har sett kjapt over, eneste jeg la merke til var at i første delen setter du

Frasprak = document.forms (..),

mens i andre delen bruker du fraSprak.

 

Du bruker også brukerSvar og brukersvar om hverandre, antar at det kun er en variabel.

 

Ta også en titt i javacript console i chrome (evnt. lignende i andre nettlesere). Hvis du laster opp en .zip med filene så kan jeg ta en titt!

Endret av gablank
Lenke til kommentar

Du bruker også brukerSvar og brukersvar om hverandre, antar at det kun er en variabel.

(svarer selv om det ikke er til meg ;) )

Det er for å skille på case, se switchen i siste kode blokk i første post, eks:

spanskOrd = "mucho"

SpanskOrd = "Mucho"

 

Er nok bedre å bruke toUpperCase() (alternativt toLowerCase() )når man utfører sjekken, men mulig det kan være problemer med spesial tegn, f.eks:

else if (fraSprak == 0 && (
 (brukerSvar.toUpperCase() != spanskOrd.toUpperCase() && godtaUtenTegn == "nei")
 ||
 (brukersvar.toUpperCase() != spanskOrdUten.toUpperCase()  && godtaUtenTegn == "ja" )
)) {
	resultat = "Feil, " + norskOrd + " er " + spanskOrd + "!";
}

Da slipper man å tenke case og å definere ting flere ganger (forutsatt at spesial tegn ikke skaper problemer).

Endret av Crowly
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...