hoger/lager vreemd foutje

Status
Niet open voor verdere reacties.

fritsflits

Gebruiker
Lid geworden
11 feb 2008
Berichten
82
Hallo,

Ik ben bezig met javascript voor school. Beetje aan het oefenen.
Ik heb een hoger / lager spelletje gemaakt maar deze werkt nog niet zoals ik wil.
Mijn code:

Code:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Vul hier een getal in tussen de</title>
</head>

<body>
<script>
var blaat= Math.floor(Math.random()*1000+1);
var aantal = 0
function myding(bigtest)
{
if(document.ding1.ding2.value==blaat)
{
aantal++
document.getElementById('ding7').innerHTML = (aantal);
document.ding1.ding2.value="het getal was "+document.ding1.ding2.value;
document.ding1.ding4.value="";
alert("U heeft het goed geraden!");
document.ding1.ding5.value="0";
document.ding1.ding6.value="1000";
blaat= Math.floor(Math.random()*1000+1);
}
if (document.ding1.ding2.value>blaat)
{
document.ding1.ding4.value=document.ding1.ding2.value+" "+document.ding1.ding4.value;

if(document.ding1.ding6.value>document.ding1.ding2.value)
{
document.ding1.ding6.value=document.ding1.ding2.value;
}
alert("lager");
}
if (document.ding1.ding2.value<blaat)
{
document.ding1.ding4.value=document.ding1.ding2.value+" "+document.ding1.ding4.value;

if(document.ding1.ding5.value<document.ding1.ding2.value)
{
document.ding1.ding5.value=document.ding1.ding2.value;
}
alert("hoger");
}
}
</script>
<form name="ding1">
Vul hier een getal in tussen de 0 en 1000:<br>
<input type="text" name="ding2"><input type="button" name="ding3" value="controleren" onclick="myding(document.ding1.ding2.value)">
<br><br>De getallen die u geprobeert heeft: 
<br><textarea name="ding4"></textarea>
<br><br>
Het getal zit tussen de:<br>
<input type="text" name="ding5" value="0"><input type="text" name="ding6" value="1000"><br><br>
Aantal keer goed geraden:<div id="ding7"></div>
</form>
</body>

</html>

Bij dit stukje zit het probleem:
Code:
if (document.ding1.ding2.value>blaat)
{
document.ding1.ding4.value=document.ding1.ding2.value+" "+document.ding1.ding4.value;

if(document.ding1.ding6.value>document.ding1.ding2.value)
{
document.ding1.ding6.value=document.ding1.ding2.value;
}
alert("lager");
}

Wanneer het getal lager is zou document.ding1.ding6 lager moeten worden.
Zo klem je dus het getal eigenlijks in, maar dat wil niet.
Wanneer het getal hoger is werkt het wel. Dan wordt document.ding1.ding5 wel steeds hoger.

Misschien is het handig om eerst zelf dit scriptje te testen.
Vul het getal "999" in en je ziet dat de laatste input text niet verandert.

Ik hoop dat m'n javascripttaal een beetje te begrijpen is.

Ik weet bijna zeker dat het onderstaande stukje zit:
Code:
if (document.ding1.ding2.value>blaat)
{
document.ding1.ding4.value=document.ding1.ding2.value+" "+document.ding1.ding4.value;

if(document.ding1.ding6.value>document.ding1.ding2.value)
{
document.ding1.ding6.value=document.ding1.ding2.value;
}
alert("lager");
}

Want als ik if(document.ding1.ding6.value>800) doe, dan werkt dit wel.
 
Laatst bewerkt:
Hé, heb je al gemerkt dat het wél werkt als je de inhoud van ding6 eens manueel verandert naar een stukje tekst? Het zal volgens mij daaraan liggen. Ik zal het eens verder uitzoeken.

EDIT: Eigenlijk werkt het altijd behalve als ding6 een getal is!
 
Laatst bewerkt:
Ben er even mee bezig geweest en heb wat heel apparts.
value="1000" werkt niet. value="999" werkt wel

top dat je er naar gekeken heb! :thumb:

value="9999" werkt wel weer! heel appart..
 
Laatst bewerkt:
OK, ik heb het gevonden! Ik heb de bug gefixed, en je code ook wat "gecleand". Ik heb zelfs de DT-fout verbeterd :D
Eigenlijk was het gewoon een if-else-of-else if- probleempje.
Veel plezier ermee!!

EDIT: Oeps, nog een foutje gevonden... wacht nog eventjes voordat je de code test... het is wel raar, de eerste keer stelt hij hem gelijk als bigtest KLEINER is, en voor de rest alleen maar als hij GROTER is??? Wat een venijnig foutje zeg :D

EDIT 2: Aha, bij een debug heb ik gemerkt dat de value van ding6 wel 1000 lijkt, maar dat het programma het beschouwt als 0! Dit kan mogelijk de oorzaak zijn van alle problemen.

Code:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Vul hier een getal in tussen de</title>
</head>

<body>
<script>
var blaat = Math.floor(Math.random()*1000+1);
var aantal = 0;

function myding(bigtest)
{






if(bigtest==blaat)
{
aantal++
document.getElementById('ding7').innerHTML = (aantal);
bigtest="het getal was "+document.ding1.ding2.value;
document.ding1.ding4.value="";
alert("U heeft het goed geraden!");
document.ding1.ding5.value="0";
document.ding1.ding6.value="1000";
blaat= Math.floor(Math.random()*1000+1);
}

else
{

if (bigtest<blaat)
{
if(document.ding1.ding5.value < bigtest)
{
document.ding1.ding5.value = bigtest;
}
alert("hoger");
}

else if (bigtest>blaat)
{
if(bigtest > document.ding1.ding6.value)
{
document.ding1.ding6.value = bigtest;
}
alert("lager");
}







}





document.ding1.ding4.value=document.ding1.ding2.value+" "+document.ding1.ding4.value;
}
</script>
<form name="ding1">
Vul hier een getal in tussen de 0 en 1000:<br>
<input type="text" name="ding2"><input type="button" name="ding3" value="controleren" onclick="myding(document.ding1.ding2.value)">
<br><br>De getallen die u geprobeert heeft: 
<br><textarea name="ding4"></textarea>
<br><br>
Het getal zit tussen de:<br>
<input type="text" name="ding5" value="0"><input type="text" name="ding6" value="1000"><br><br>
Aantal keer goed geraden:<div id="ding7"></div>
</form>
</body>

</html>
 
Laatst bewerkt:
Ik heb de code niet echt bekeken, maar het probleem kan hier zijn dat je wil rekenen (groter dan, kleiner dan e.d.) met strings in plaats van met getallen, en dat kan volgens mij niet in Javascript. Het lijkt me mogelijk dat een string "1000" dan bvb gewoon de waarde 0 heeft of zo als je dingen als < en > gebruikt.
 
Het gaat hier nog mis:
PHP:
<input type="text" ... >
De waarde van een formulierveld is van het type string. Daardoor wordt er bij een vergelijking gekeken naar de alfabetische volgorde. En dan is: '1000' < '400' :)

Een paar keer parseInt() lost het op:
PHP:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Vul hier een getal in tussen de</title>
</head>

<body>
<script>
 var blaat = Math.floor(Math.random()*1000+1);
 var aantal = 0;

function myding(bigtest) {
 document.ding1.ding4.value = bigtest + ' ' + document.ding1.ding4.value;
 bigtest = parseInt(bigtest,10);

 if(bigtest == blaat) {
  aantal++
  document.getElementById('ding7').innerHTML = (aantal);
  bigtest = 'het getal was ' + document.ding1.ding2.value;
  alert('U heeft het goed geraden!');
  document.ding1.ding4.value = '';
  document.ding1.ding5.value = 0;
  document.ding1.ding6.value = 1000;
  blaat = Math.floor(Math.random()*1000+1);
  };

 if (bigtest < blaat) {
  if(parseInt(document.ding1.ding5.value,10) < bigtest) document.ding1.ding5.value = bigtest;
  alert('hoger');
  };

 if (bigtest > blaat) {
  if(parseInt(document.ding1.ding6.value,10) > bigtest) document.ding1.ding6.value = bigtest;
  alert('lager');
  };

 };

</script>
<form name="ding1">
Vul hier een getal in tussen de 0 en 1000:<br>
<input type="text" name="ding2"><input type="button" name="ding3" value="controleren" onclick="myding(document.ding1.ding2.value)">
<br><br>De getallen die u geprobeert heeft: 
<br><textarea name="ding4"></textarea>
<br><br>
Het getal zit tussen de:<br>
<input type="text" name="ding5" value="0"><input type="text" name="ding6" value="1000"><br><br>
Aantal keer goed geraden:<div id="ding7"></div>
</form>
</body>

</html>


Vr.Gr. Egel.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan