Array bestaat wel/niet

Status
Niet open voor verdere reacties.

Threetimes

Gebruiker
Lid geworden
1 mrt 2008
Berichten
46
Ik heb de volgende HTML en Javascript:
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  <script type="text/javascript" src="script.js"></script>
  <link rel="stylesheet" type="text/css" href="style.css" />
  <title>Licht Quiz</title>
</head>
<body onload="init()">

<h1>Een quiz over licht</h1>

<ol class="vragen">
  <li>Is licht een golf of een deeltje?
    <ol class="antwoorden">
      <li onclick="select('1','a')" id="1a">Een deeltje</li>
      <li onclick="select('1','b')" id="1b">Een golfbeweging</li>
      <li onclick="select('1','c')" id="1c">Beiden</li>
      <li onclick="select('1','d')" id="1d">Geen van beiden</li>
    </ol>
  </li>
  <li>Is licht een golf of een deeltje?
    <ol class="antwoorden">
      <li onclick="select('2','a')" id="2a">Een deeltje</li>
      <li onclick="select('2','b')" id="2b">Een golfbeweging</li>
      <li onclick="select('2','c')" id="2c">Beiden</li>
      <li onclick="select('2','d')" id="2d">Geen van beiden</li>
    </ol>
  </li>
  <li>Is licht een golf of een deeltje?
    <ol class="antwoorden">
      <li onclick="select('3','a')" id="3a">Een deeltje</li>
      <li onclick="select('3','b')" id="3b">Een golfbeweging</li>
      <li onclick="select('3','c')" id="3c">Beiden</li>
      <li onclick="select('3','d')" id="3d">Geen van beiden</li>
    </ol>
  </li>
  <li>Is licht een golf of een deeltje?
    <ol class="antwoorden">
      <li onclick="select('4','a')" id="4a">Een deeltje</li>
      <li onclick="select('4','b')" id="4b">Een golfbeweging</li>
      <li onclick="select('4','c')" id="4c">Beiden</li>
      <li onclick="select('4','d')" id="4d">Geen van beiden</li>
    </ol>
  </li>
  <li>Is licht een golf of een deeltje?
    <ol class="antwoorden">
      <li onclick="select('5','a')" id="5a">Een deeltje</li>
      <li onclick="select('5','b')" id="5b">Een golfbeweging</li>
      <li onclick="select('5','c')" id="5c">Beiden</li>
      <li onclick="select('5','d')" id="5d">Geen van beiden</li>
    </ol>
  </li>
  <li>Is licht een golf of een deeltje?
    <ol class="antwoorden">
      <li onclick="select('6','a')" id="6a">Een deeltje</li>
      <li onclick="select('6','b')" id="6b">Een golfbeweging</li>
      <li onclick="select('6','c')" id="6c">Beiden</li>
      <li onclick="select('6','d')" id="6d">Geen van beiden</li>
    </ol>
  </li>
  <li>Is licht een golf of een deeltje?
    <ol class="antwoorden">
      <li onclick="select('7','a')" id="7a">Een deeltje</li>
      <li onclick="select('7','b')" id="7b">Een golfbeweging</li>
      <li onclick="select('7','c')" id="7c">Beiden</li>
      <li onclick="select('7','d')" id="7d">Geen van beiden</li>
    </ol>
  </li>
  <li>Is licht een golf of een deeltje?
    <ol class="antwoorden">
      <li onclick="select('8','a')" id="8a">Een deeltje</li>
      <li onclick="select('8','b')" id="8b">Een golfbeweging</li>
      <li onclick="select('8','c')" id="8c">Beiden</li>
      <li onclick="select('8','d')" id="8d">Geen van beiden</li>
    </ol>
  </li>
  <li>Is licht een golf of een deeltje?
    <ol class="antwoorden">
      <li onclick="select('9','a')" id="9a">Een deeltje</li>
      <li onclick="select('9','b')" id="9b">Een golfbeweging</li>
      <li onclick="select('9','c')" id="9c">Beiden</li>
      <li onclick="select('9','d')" id="9d">Geen van beiden</li>
    </ol>
  </li>
  <li>Is licht een golf of een deeltje?
    <ol class="antwoorden">
      <li onclick="select('10','a')" id="10a">Een deeltje</li>
      <li onclick="select('10','b')" id="10b">Een golfbeweging</li>
      <li onclick="select('10','c')" id="10c">Beiden</li>
      <li onclick="select('10','d')" id="10d">Geen van beiden</li>
    </ol>
  </li>
  <li>Is licht een golf of een deeltje?
    <ol class="antwoorden">
      <li onclick="select('11','a')" id="11a">Een deeltje</li>
      <li onclick="select('11','b')" id="11b">Een golfbeweging</li>
      <li onclick="select('11','c')" id="11c">Beiden</li>
      <li onclick="select('11','d')" id="11d">Geen van beiden</li>
    </ol>
  </li>
  <li>Is licht een golf of een deeltje?
    <ol class="antwoorden">
      <li onclick="select('12','a')" id="12a">Een deeltje</li>
      <li onclick="select('12','b')" id="12b">Een golfbeweging</li>
      <li onclick="select('12','c')" id="12c">Beiden</li>
      <li onclick="select('12','d')" id="12d">Geen van beiden</li>
    </ol>
  </li>
  <li>Is licht een golf of een deeltje?
    <ol class="antwoorden">
      <li onclick="select('13','a')" id="13a">Een deeltje</li>
      <li onclick="select('13','b')" id="13b">Een golfbeweging</li>
      <li onclick="select('13','c')" id="13c">Beiden</li>
      <li onclick="select('13','d')" id="13d">Geen van beiden</li>
    </ol>
  </li>
  <li>Is licht een golf of een deeltje?
    <ol class="antwoorden">
      <li onclick="select('14','a')" id="14a">Een deeltje</li>
      <li onclick="select('14','b')" id="14b">Een golfbeweging</li>
      <li onclick="select('14','c')" id="14c">Beiden</li>
      <li onclick="select('14','d')" id="14d">Geen van beiden</li>
    </ol>
  </li>
  <li>Is licht een golf of een deeltje?
    <ol class="antwoorden">
      <li onclick="select('15','a')" id="15a">Een deeltje</li>
      <li onclick="select('15','b')" id="15b">Een golfbeweging</li>
      <li onclick="select('15','c')" id="15c">Beiden</li>
      <li onclick="select('15','d')" id="15d">Geen van beiden</li>
    </ol>
  </li>
  <li>Is licht een golf of een deeltje?
    <ol class="antwoorden">
      <li onclick="select('16','a')" id="16a">Een deeltje</li>
      <li onclick="select('16','b')" id="16b">Een golfbeweging</li>
      <li onclick="select('16','c')" id="16c">Beiden</li>
      <li onclick="select('16','d')" id="16d">Geen van beiden</li>
    </ol>
  </li>
  <li>Is licht een golf of een deeltje?
    <ol class="antwoorden">
      <li onclick="select('17','a')" id="17a">Een deeltje</li>
      <li onclick="select('17','b')" id="17b">Een golfbeweging</li>
      <li onclick="select('17','c')" id="17c">Beiden</li>
      <li onclick="select('17','d')" id="17d">Geen van beiden</li>
    </ol>
  </li>
  <li>Is licht een golf of een deeltje?
    <ol class="antwoorden">
      <li onclick="select('18','a')" id="18a">Een deeltje</li>
      <li onclick="select('18','b')" id="18b">Een golfbeweging</li>
      <li onclick="select('18','c')" id="18c">Beiden</li>
      <li onclick="select('18','d')" id="18d">Geen van beiden</li>
    </ol>
  </li>
  <li>Is licht een golf of een deeltje?
    <ol class="antwoorden">
      <li onclick="select('19','a')" id="19a">Een deeltje</li>
      <li onclick="select('19','b')" id="19b">Een golfbeweging</li>
      <li onclick="select('19','c')" id="19c">Beiden</li>
      <li onclick="select('19','d')" id="19d">Geen van beiden</li>
    </ol>
  </li>
  <li>Is licht een golf of een deeltje?
    <ol class="antwoorden">
      <li onclick="select('20','a')" id="20a">Een deeltje</li>
      <li onclick="select('20','b')" id="20b">Een golfbeweging</li>
      <li onclick="select('20','c')" id="20c">Beiden</li>
      <li onclick="select('20','d')" id="20d">Geen van beiden</li>
    </ol>
  </li>
</ol>

<div id="end">
  <button onclick="test()">test</button><br>
  <button onclick="check()">Controleer je antwoorden!</button>
</div>

</body>
</html>
PHP:
function init()
{
  var geantwoord=new Array("e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e");
  //                        1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20
  var antwoorden=new Array("c","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a");
}

function test()
{
//simulatie voor 13 goed en 7 fout
//punten = 13 - (7/2) = 9.5
select("1","c");
select("2","a");
select("3","a");
select("4","a");
select("5","a");
select("6","a");
select("7","a");
select("8","a");
select("9","a");
select("10","a");
select("11","a");
select("12","a");
select("13","a");
select("14","b");
select("15","c");
select("16","d");
select("17","b");
select("18","c");
select("19","d");
select("20","d");
}

function select(vraag,antwoord)
{
  document.getElementById(vraag+"a").style.fontWeight="normal";
  document.getElementById(vraag+"b").style.fontWeight="normal";
  document.getElementById(vraag+"c").style.fontWeight="normal";
  document.getElementById(vraag+"d").style.fontWeight="normal";
  
  document.getElementById(vraag+antwoord).style.fontWeight="bold";
  
  geantwoord[parseInt(vraag)]=antwoord; //de fout
}

function check()
{
  punten=0;
  for(i=1;i<=20;i++)
  {
    if (geantwoord[i]==antwoorden[i])
    {
      document.getElementById(i+antwoorden[i]).style.fontWeight="bold";
      document.getElementById(i+antwoorden[i]).style.color="lime";
      
      punten=punten+1;
    }
    else
    {
      document.getElementById(i+geantwoord[i]).style.fontWeight="bold";
      document.getElementById(i+geantwoord[i]).style.color="red";
      
      document.getElementById(i+antwoorden[i]).style.fontWeight="bold";
      document.getElementById(i+antwoorden[i]).style.color="lime";
      
      punten=punten-0.5;
    }
  }
  alert("Je hebt "+punten+" punten!");
}
Als ik op test klik (ook als ik gewoon de vragen beantwoord) krijg ik de volgende fout (in Opera):

Code:
[FONT="Courier New"]Event thread: click
Error:
name: ReferenceError
message: Statement on line 43: Undefined variable: geantwoord
Backtrace:
  Line 43 of linked script [url]http://licht.peter-server.homelinux.net/script.js:[/url] In function select
      geantwoord[parseInt(vraag)]=antwoord; //de fout
  Line 12 of linked script [url]http://licht.peter-server.homelinux.net/script.js:[/url] In function test
    select("1","c");
  Line 1 of function script 
    test()
  ...
stacktrace:   ...  Line 12 of linked script [url]http://licht.peter-server.homelinux.net/script.js:[/url] In function test
    select("1","c");
  Line 1 of function script 
    test()
  ...
[/FONT]
 
Ik heb nog wat getest, en ik krijg in FireFox en de-browser-die-niet-genoemd-gaat-worden dezelfde fout. Ik zou denken dat de fout ergens in init() zit, maar dat word gewoon uitgevoerd.
PHP:
alert(geantwoord); // undefined (als verwacht)
  var geantwoord=new Array("e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e");
alert(geantwoord.length); // 20 (als verwacht)
Ik zie ook geen spelfouten hier.
 
Waarschijnlijk kent ie de array niet meer omdat je hem binnen een functie aanmaakt.

Probeer dit eens:
PHP:
var geantwoord;
var antwoorden;
function init()
{
 geantwoord=new Array("e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e");
  //                        1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20
  antwoorden=new Array("c","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a");
}
 
Waarschijnlijk kent ie de array niet meer omdat je hem binnen een functie aanmaakt.

Probeer dit eens:
PHP:
var geantwoord;
var antwoorden;
function init()
{
 geantwoord=new Array("e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e");
  //                        1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20
  antwoorden=new Array("c","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a");
}
Wat jij zegt klopt, en ik heb de functie init() helemaal nieteens nodig!
Alles werkt nu
 
Maar nu is ie global

Maar nu heb je een globale variabele ervan gemaakt... daarmee vervuil je de globale namespace.

Mooier is wellicht iets als dit:

Code:
var quiz = {
  geantwoord: ["e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e"],
  antwoorden: ["c","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a"],

  test: function() { /*  ... */ },
 
  select: function(vraag,antwoord) {
    // ...  
    quiz.geantwoord[parseInt(vraag)] = antwoord;
  },

  check: function() { /* ... */ }
}

Op deze manier creeer je maar één object in de global namespace en kun je alle functies en velden benaderen via dat object.
 
Maar nu heb je een globale variabele ervan gemaakt... daarmee vervuil je de globale namespace.

Mooier is wellicht iets als dit:

Code:
var quiz = {
  geantwoord: ["e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e","e"],
  antwoorden: ["c","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a"],

  test: function() { /*  ... */ },
 
  select: function(vraag,antwoord) {
    // ...  
    quiz.geantwoord[parseInt(vraag)] = antwoord;
  },

  check: function() { /* ... */ }
}

Op deze manier creeer je maar één object in de global namespace en kun je alle functies en velden benaderen via dat object.
Ik probeer een eenvoudig, simpel scriptje te schrijven. Je bezorgt me hoofdpijn.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan