Problem mit Script, bitte um Hilfe!
Klassen
- javascript
Hallo zusammen, habe folgendes Script geschrieben:
var fragenarray = new Array(
new Array("Dies ist Frage A",0,"Antwort1","Antwort2","Antwort3","Antwort4"),
new Array("Dies ist Frage B",0,"Antwort1","Antwort2","Antwort3","Antwort4"));
g_frage = new Array;
var zaehler = 0;
var i = -1;
function init()
{
i=i+1;
alert(i);
g_frage=fragenarray[i];
alert(g_frage);
document.write(''+g_frage[0]+'');
document.write('<form name="form1" method="post" action="">\
<p>\
<input type="radio" name="radio" value="1">'+g_frage[2]+'\
<br>\
<input type="radio" name="radio" value="2">'+g_frage[3]+'\
<br>\
<input type="radio" name="radio" value="3">'+g_frage[4]+'\
<br>\
<input type="radio" name="radio" value="4">'+g_frage[5]+'\
<br>\
</p>\
<input type="button" name="b_backward" value="Zurück" onClick="javascript:back()">\
<input type="button" name="b_forward" value="Weiter" onClick="javascript:check(1)">\
</form>');
}
function check(zaehler)
{
if(document.form1.radio[2].checked == true)
{
alert('Richtig');
init();
}
else
{
alert('Falsch');
}
}
function back()
{
alert('HUHU');
}
Es handelt sich hierbei um den Versuch ein Testspiel zu programmieren (fragt nicht nach dem Sinn!)!
Nun habe ich folgendes Problem:
Wie unschwer erkennen zu sein dürfte, will ich immer eine Frage / Seite anzeigen! Ist diese richtig beantwortet, so soll eine neue Frage erscheinen!
So, nun zum eigentlichen Problem:
Nachdem ich die erste Frage erstellt habe (Frage A) und auch richtig beantwortet habe, soll sich ja normalerweise Frage B aufbauen! Leider geschieht das nicht und ich bin mir nicht sicher warum! Der FireFox Debugger gibt als Fehlermeldung "g_frage is not defined" (Zeile 19) -> "<input type="radio" name="radio" value="1">'+g_frage[2]+'" das scheint auch logisch, dennn der erste TEil der Scripts wird abgearbeitet! Denke mal das es was mit dem "+g_frage[2]+'" hier zu tun hat, weiß allerdings nicht was, da es beim ersten mal ja auch reibungslos klappt!
mfg Klassen
PS: Bitte nur Lösungsvorschläge, sprich keine Äusserungen zur Programmiersprachenwahl oder sonstiges, es ist ein Schulprojekt und muss in Javascript angefertitgt werden! Das es noch nicht sehr weit ist, weiß ich auch selber!
Hi,
var fragenarray = new Array(
new Array("Dies ist Frage A",0,"Antwort1","Antwort2","Antwort3","Antwort4"),
new Array("Dies ist Frage B",0,"Antwort1","Antwort2","Antwort3","Antwort4"));
Bitte merken: fragenarray ist ein Array mit zwei Arrays als Elementen, ansprechbar als: fragenarray[0] und fragenarray[1].
BTW: was soll die 0 dazwischen?
function init()
{
i=i+1;
alert(i);
g_frage=fragenarray[i];
Beim erstem Mal beinhalted das Array g_frage fragenarray[0]?
Ja, dsa ist so richtig.
Beim zweiten Mal fragenarray[1] und beim iten Mal fragenarray[i]?
Nein, tut mir leid, das ist nicht korrekt.
alert(g_frage);
document.write(''+g_frage[0]+'');
g_frage[0] entspricht fragenarray[0][0]. Warum arbeitest Du hier mit einer Kopie?
» Der FireFox Debugger gibt als Fehlermeldung "g_frage is not defined" (Zeile 19) -> "<input type="radio" name="radio" value="1">'+g_frage[2]+'" das scheint auch logisch, dennn der erste TEil der Scripts wird abgearbeitet! Denke mal das es was mit dem "+g_frage[2]+'" hier zu tun hat, weiß allerdings nicht was, da es beim ersten mal ja auch reibungslos klappt!
Bei mir klappt es noch nicht einmal beim ersten Mal.
Ändere ich jedoch die zwei Aufrufe von document.write()
document.write(''+g_frage[0]+'');
document.write('<form name="form1" method="post" action="">...
in einen um
document.write(g_frage[0]+'<form name="form1" method="post" action="">...
bekomme ich schonmal Dein Formular angezeigt. Wenn ich jetzt auf "weiter" klicke und check() aufgerufen werden soll, sagt mir die Javascript-Konsole (das ist übrigens nicht der Debugger, den Du da benutzt, der ist wieder ein anderes Programm. Es reicht aber meistens die Console.)
"Error: check is not defined"
Warum nicht?
Nun, document.write() _überschreibt_ alles!
PS: Bitte nur Lösungsvorschläge, sprich keine Äusserungen zur Programmiersprachenwahl oder sonstiges, es ist ein Schulprojekt und muss in Javascript angefertitgt werden! Das es noch nicht sehr weit ist, weiß ich auch selber!
Ach, Hausaufgaben? Dann gibt's auch keine Lösungsvorschläge sondern nur Hinweise, wie Du's selber lösen kannst. Aber ich bin ja nicht so und habe Dir oben schonmal den Denkfehler aufgezeigt: document.write() ist zum Schreiben nicht die richtige Wahl bzw wurde nicht korrekt benutzt. Mir wäre es aber lieb, wenn Du "ist nicht die richtige Wahl" bevorzugst ;-)
Du solltest Dich am besten Mal durch die SelfHTML Seiten bezüglich Javascript ackern. Konkrete Links kann ich nicht geben, da es einfach zuviele Stellen betrifft. Da könnt' ich einfacher den korrekten Code posten und _das_ werde ich mit Sicherheit _nicht_ tun! ;-)
so short
Christoph Zurnieden
Bitte merken: fragenarray ist ein Array mit zwei Arrays als Elementen, ansprechbar als: fragenarray[0] und fragenarray[1].
Danke ist bekannt!
BTW: was soll die 0 dazwischen?
Ist z.Zt noch unwichtig!
Beim erstem Mal beinhalted das Array g_frage fragenarray[0]?
Ja, dsa ist so richtig.
Beim zweiten Mal fragenarray[1] und beim iten Mal fragenarray[i]?
Nein, tut mir leid, das ist nicht korrekt.
Kannst du mir auch sagen, warum das so nicht korreckt ist?
g_frage[0] entspricht fragenarray[0][0]. Warum arbeitest Du hier mit einer Kopie?
Habe das jetzt umgeändert, wusste nicht, dass man ein zweidimensionales Array mit[x][x] ansprechen kann! Habe nun das Hilfsarray g_frage rausgeworfen! s.u.
» Der FireFox Debugger gibt als Fehlermeldung "g_frage is not defined" (Zeile 19) -> "<input type="radio" name="radio" value="1">'+g_frage[2]+'" das scheint auch logisch, dennn der erste TEil der Scripts wird abgearbeitet! Denke mal das es was mit dem "+g_frage[2]+'" hier zu tun hat, weiß allerdings nicht was, da es beim ersten mal ja auch reibungslos klappt!
Bei mir klappt es noch nicht einmal beim ersten Mal.
Ändere ich jedoch die zwei Aufrufe von document.write()document.write(''+g_frage[0]+'');
document.write('<form name="form1" method="post" action="">...in einen um
document.write(g_frage[0]+'<form name="form1" method="post" action="">...
bekomme ich schonmal Dein Formular angezeigt. Wenn ich jetzt auf "weiter" klicke und check() aufgerufen werden soll, sagt mir die Javascript-Konsole (das ist übrigens nicht der Debugger, den Du da benutzt, der ist wieder ein anderes Programm. Es reicht aber meistens die Console.)
"Error: check is not defined"
Warum nicht?
Nun, document.write() _überschreibt_ alles!
Verstehe deine Erläuterungen hier nicht, bekomme keine solche Fehlermeldung!
PS: Bitte nur Lösungsvorschläge, sprich keine Äusserungen zur Programmiersprachenwahl oder sonstiges, es ist ein Schulprojekt und muss in Javascript angefertitgt werden! Das es noch nicht sehr weit ist, weiß ich auch selber!
Ich will ja auch gar kein fertiges Script vorgelegt bekommen! Ich verstehe allerdings nicht, warum document.write ungeeignet ist!
mfg Klassen
Hier nun noch mein aktuelles Script:
var fragenarray = new Array(
new Array("Dies ist Frage A",0,"Antwort1","Antwort2","Antwort3","Antwort4"),
new Array("Dies ist Frage B",0,"Antwort1","Antwort2","Antwort3","Antwort4"));
var i = -1;
function init()
{
i=i+1;
alert(i);
document.write(''+fragenarray[i][0]+'');
document.write('<form name="form1" method="post" action="">\
<p>\
<input type="radio" name="radio" value="1">'+fragenarray[i][2]+'\
<br>\
<input type="radio" name="radio" value="2">'+fragenarray[i][3]+'\
<br>\
<input type="radio" name="radio" value="3">'+fragenarray[i][4]+'\
<br>\
<input type="radio" name="radio" value="4">'+fragenarray[i][5]+'\
<br>\
</p>\
<input type="button" name="b_backward" value="Zurück" onClick="javascript:back()">\
<input type="button" name="b_forward" value="Weiter" onClick="javascript:check()">\
</form>');
}
function check()
{
if(document.form1.radio[2].checked == true)
{
alert('Richtig');
init();
}
else
{
alert('Falsch');
}
}
function back()
{
alert('HUHU');
}
Hi,
BTW: was soll die 0 dazwischen?
Ist z.Zt noch unwichtig!
Na, die dürfte später auch noch unwichtig sein, schmeiß die raus.
Beim erstem Mal beinhalted das Array g_frage fragenarray[0]?
Ja, dsa ist so richtig.
Beim zweiten Mal fragenarray[1] und beim iten Mal fragenarray[i]?
Nein, tut mir leid, das ist nicht korrekt.
Kannst du mir auch sagen, warum das so nicht korreckt ist?
Weil durch document.write(), wie weiter unten angemerkt, alles übrschrieben wurde, auch Dein Script.
g_frage[0] entspricht fragenarray[0][0]. Warum arbeitest Du hier mit einer Kopie?
Habe das jetzt umgeändert, wusste nicht, dass man ein zweidimensionales Array mit[x][x] ansprechen kann!
Es hätte aucheinen speziellen Grund haben können (spätere Änderung o.ä.) deshalb meine Frage.
"Error: check is not defined"
Warum nicht?
Nun, document.write() _überschreibt_ alles!Verstehe deine Erläuterungen hier nicht, bekomme keine solche Fehlermeldung!
Hast Du, wie, Deinen Code entsprechend geändert? Dann müßtest Du auch diese oder zumindest eine ähnliche Fehlermeldung bekommen.
Ich will ja auch gar kein fertiges Script vorgelegt bekommen! Ich verstehe allerdings nicht, warum document.write ungeeignet ist!
Weil danahc eben alles weg ist außer dem, was Du durch document.write() hingeschrieben hast. Inklusive Deines Skriptes.
Du kannst den DOM-Browser benutzen, um Dir den erzeugten Code anzeigen zu lassen, schau da mal nach, was am Ende rauskommt. Ist hier bei mir unter Tools->DOM-Inspector, dann dort das entspr Fenster öffnen, das ergibt eine ellenlange Liste. Runterscrollen, bis zum letztem hbox dann weiter ->vbox(2)->hbox(1)->tabbrowser->xul:tabbox->xul:tabpanels->xul:browser, wenn Du nur ein Tab aufhast, ist das darunter Dein Dokument und zwar wie es _dargestellt_ wird. Was dann dort nicht auftaucht ist einfach nicht mehr vorhanden. Kannst ja mal ein wenig mit document.write() herumexperimentieren (oder einfach die entsprechende Passage in SelfHTML lesen).
Dein Problem besteht also darin, das Du ein Javascript aufrufen möchtest, das gar nicht mehr vorhanden ist.
Jetzt kannst Du verschiedene Dinge machen:
Die letze Version ist dabei die eleganteste. Wenn Du wirklich Javascript lernen _willst_ und nicht _mußt_ ist Kenntnis über die DOM-Mechanik unabdingbar. Wenn Du nur den Kurs bestehen muß, um Punkte zusammen zu kriegen: nimm Frames, ist einfach und schnell. Hat dann aber den evt entscheidenden Nachteil, das Frames hier nicht gerne gesehen werden, auch von mir nicht. Das müßtest Du Dir dann selber rausfummeln. Bei SelfHTML und wor allem hier im Archiv steht aber auch genug dazu.
so short
Christoph Zurnieden