[JS] variable doorgeven werkt niet

Pagina: 1
Acties:

  • Johnny
  • Registratie: December 2001
  • Laatst online: 01-09 16:58

Johnny

ondergewaardeerde internetguru

Topicstarter
Ik ben al enige tijd bezig met een tetris spel in Javascript. Daarvoor heb ik een gratis script genomen en het aangepast aan de layout en taal.

Om het nog leuker te maken om te spelen wil ik dat de hoogste scores worden opgeslagen waarbij de speler zijn naam ook kan invullen. Dat onderdeel werkt inmiddels.

Maar nu lukt het me met geen mogelijkheid om de behaalde score aan een hidden field toe te wijzen zodat deze nadat het spel is gestopt kan worden doorgestuurd naar een volgende pagina.

Als het spel is afgelopen wordt de functie Game_Over() aangeroepen. Als het uitgespeeld is wordt _block.blockxx.innerHTML de eerste optie, als het niet uitgespeeld ben je game over dus komt de tweede.

Omdat het heel erg lang duurt voordat je het hebt uitgespeeld ben ik alleen nog maaar met de onderste bezig geweest omdat die makkelijk te testen is (jezelf af laten gaan.)

De tabel bevat 2 formulieren, 1 die de waarden van een hiddenfield naar de highscore pagina doorstuurt en een formulier wat naar de huidige paginalinkt om zo overnieuw te beginnen.

Om de waarde aan het hidden field toe te wijzen dacht ik de volgende methode te kunnen gebruiken:

_block.blockxx.innerHTML.gameform.gamescore.value = game_score;

Maar dat werkt niet, allerlei variaties daarop lijken ook niet te werken.

Hij staat dus op deze manier in het script:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function Game_Over() {
  Event_Release();

  clearInterval(block_timer_id);

    _block.blockxx.innerHTML.gameform.gamescore.value = game_score;

  if (game_winner)
    _block.blockxx.innerHTML = '<table width="' + game_tag_width +
 '" height="' + game_tag_height + '" bgcolor="#FFF2D5" cellpadding="2"
 cellspacing="0" style="border: 2; border-style: solid; border-color: #6666AA">
<tr align="center" valign="middle"><td><p class="winner">Gewonnen!
</p></td></tr></table>';
  else
    _block.blockxx.innerHTML = '<table width="' + game_tag_width +
 '" height="' + game_tag_height + '" bgcolor="#FFF2D5" cellpadding="3"
 cellspacing="0" style="border: 2; border-style: solid; border-color: #6666AA">
<tr align="center" valign="middle"><td><p class="gameover">Game Over</p>
 <p>Je hebt ' + game_score + ' punten</p><p><form method="link"
 action="game_highscore_add.php" name="gameform">
<input type="hidden" name="gamescore" value=0></p>
<p align="center"><input type="submit" value="Highscores" class="button"></p>
</form><form method="link" action="game_tetris.html"><p align="center">
<input type="submit" value="Opnieuw" class="button"></p></form></td></tr></table>';

 _block.blockxx.style.pixelTop = block_base_y;

  game_winner = false;
  game_pause = false;
  game_finished = true;

  game_tag_step = game_tag_offset;

  setTimeout("Show_Tag()",movement_timer);
}


Maar wat ik ook probeer, het blijft een error geven dat het object "null" of geen object is.

Ik heb het probleem ook al voorgelegd aan een Javascript Guru die het ook niet kon oplossen.

hier kun je het script MET de fout vinden (laat jezelf af gaan) en hier zonder de desbetreffende regel.

[ Voor 0% gewijzigd door Johnny op 25-08-2002 20:59 . Reden: Enters toegevoegd omdat de layout werdt verneukt ]

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • KillR-B
  • Registratie: Mei 2002
  • Laatst online: 20-01 20:49
Ow kee ik heb dan wel niet zoveel verstand van Javascript, maar ik vermoed dat het hieraan ligt:

Je hebt nu:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function Game_Over() {
  Event_Release();

 _block.blockxx.gameform.gamescore.value = game_score;

....

  if (game_winner)
    _block.blockxx.innerHTML = '<table.....</table>';
  else
    _block.blockxx.innerHTML = '<table>........<form method="link" action="game_highscore_add.php" name="gameform">........</table>';

...
...


je roept dus het object "gameform" aan voordat je het deze form aanmaakt met de functie InnerHTML. Probeer daarom eens dit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function Game_Over() {
  Event_Release();

....

if (game_winner)
  _block.blockxx.innerHTML = '<table. . . . . . </table>';
else
{
   _block.blockxx.innerHTML = '<table> . . . . . . . .<form method="link" action="game_highscore_add.php" name="gameform">. . . . . .. . . . . ...</table>';
   _block.blockxx.gameform.gamescore.value = game_score;
}

...
...

  • RM-rf
  • Registratie: September 2000
  • Laatst online: 21:52

RM-rf

1 2 3 4 5 7 6 8 9

he bah; innerHTML ....
wanneer mogelijk is insertAdjacentHTML of appendChild te prefereren ism met document.createElement.

maar duik gewoon eens in wat DOM-scripting

een form kan je niet via innerHTML maken, zorg er gewoon voor dat een bestaand form gerenderd wordt; en pas hiervan de waardes aan, via innerHTML zijn de waardes niet écht bestaand, enkel in een soort schimmige explorer-wereld (the twilight zone of MSHTML)
wil je een werkend form creeeren moet je dat met theForm = document.createElement("FORM"); document.appendChild(theForm); doen

(maar mijn voorkeur zou absolut hebben om een al gerenderd HTML form gewoon in de HTML te zetten, gebruik js enkel waar dit werkelijk nodig is)

//edit
hmm, keek naar KillR-B's script hierboven en dacht dat het van de topicstarter was;
code:
1
_block.blockxx.innerHTML.gameform.gamescore.value = game_score

innerHTML is géén object (maar dat vertelde explorer's error-melding je al) maar een platte text read-write-propertie die de source bevat
code:
1
document.forms['gameform'].elements['gamescore'].value = game_score

zou dus al moeten voldoen
* RM-rf raadt je aan die andere javascript-guru die dit niet zag, niet meer met hoofdletters aan te spreken, js is namelijk erg gevoelig daarvoor (case-sensitive noemen we dat) ;)

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


  • ajvdvegt
  • Registratie: Maart 2000
  • Laatst online: 15-08 12:40
'insertAdjacentHTML' is minstends even ranzig als 'innerHTML', want die's IE-only (innerHTML wordt gedoogd door Mozilla (het staat ook niet in de W3C specs). Volgens mij bestaan er sechts de methoden 'appendChild' en 'insertBefore' om objecten aan je pagina toe te voegen.
Check bv http://www.brainjar.com/dhtml/intro/ voor een goede DOM-intro.

I don't kill flies, but I like to mess with their minds. I hold them above globes. They freak out and yell "Whooa, I'm *way* too high." -- Bruce Baum