[JavaScript+HTML] Quiz

Hi,

das bedeutet, der Wert von "i" wird inkrementell erhöht, also um "1" höher.

var i = 5;
//console.log(i) gibt aus "5";
i++;
//console.log(i) gibt aus "6";

VG,
Mad
 
i++ ist die Kurzschreibweise für i = i+1
Es wird also einfach immer eins hochgezählt.

Du solltest dich für ein Quiz mit Arrays ausseinandersetzen.
Ich würde das dann so lösen:

Quiz[FrageNummer]["Frage"] = String
Quiz[FrageNummer]["Antworten"] = Array
Quiz[FrageNummer]["RichtigeAntwort"] = Index auf Array von Antworten

Du kannst dann zu beginn eine zufällige Nummer generieren und dann mithilfe deines Mehrdimensionalen Arrays "Quiz" und einer Routine "ZeigeFrage(FrageNummer)" die Frage anzeigen lassen. Am besten du generierst dann die Checkboxen und zum Schluss einen Button "Auswerten". Diesen Button bestückst du mit 'onclick = "auswerten();"'
In der Routine auswerten wird der Selektierte Index der Buttons mit dem in Quiz[FrageNummer]["Richtige Antwort"] verglichen.
 
Hi,

@Hudey

Und warum das assoziative Array? Wo genau siehst du den Vorteil der Lösung? Der TE hat doch gar nichts von dynamischen Fragen geschrieben. Solange fragen wie "i++" auftauchen sollte er erstmal etwas lauffähiges, statisches zusammenkriegen, bevor er über eine dynamische Fragestellung nachdenkt, meinst du nicht? ;)

VG,
Mad
 
Also, dieser Code hier:
for (var i=0; i < document.orderform.music.length; i++)
macht mir irgendwie ziemliche Sorgen, liegt vielleicht daran, dass ich in JS, noch nie und in anderen Sprachen sehr ungern mit for arbeite.
Meine Frage: Was bringt es mir, wenn i=0 ist, es aber danach gleich wieder um 1 erhöht wird? Und das mit dem document.orderform.music.length versteh ich auch nicht so ganz. Angenommen ich habe 3 Antwortmöglichkeiten. dann könnte ich doch schreiben
for (var i=0; i < 3; i++)
oder?
 
Hi,

i wird mit 0 initialisiert und am Ende jedes Schleifendurchlaufs um 1 erhöht, solange die Abbruchbedingung "i < document.orderform.music.length;" nicht erfüllt ist. Installiere dir FireBug und lasse dir "console.log(i)" einfach innerhalb der Schleife ausgeben, dann siehst du das.

Ich empfehle, nachdem das absolute Grundlagen sind, DRINGEND(!!!) dich da nochmal einzulesen! Sonst kommt am Ende irgendwas raus, aber nichts vernünfitges! Schleifendeklarationen haben nichts mit der Sprache zu tun sondern mit Programmierverständnis im Allgemeinen!

in anderen Sprachen sehr ungern mit for arbeite

Gibt's dafür auch eine Begründung?

VG,
Mad
 
Ja, dafür gibt es eine Begründung. Ich hatte nie einen richtigen Lehrer o.ä.
Meine erste Sprache war so eine GTR Sprache, Casio Basic. Dort hat nur mal einer kurz die For Schleife gezeigt, erklärt aber nicht.

Also, wie gesagt, ich hab mir in C++, in C, in JS, Batc, Casio Basic und in Java teilweise allein die if Anweisung, ein und Ausgabebefehl, Berechnungen, Variablen beigebracht.

Ich werds mir aber nochmal anschauen. In Casio Basic gab es verschiedene Schleifen. Einmal die For Schleife und einemal so eine While Schleife. Die letztere beherrsche ich ganz gut, zumindest in dieser GTR Sprache. Vielleicht kannst du ja mit diesen Begriffen was anfangen.


Aber nochmal, stimmt der Teil?
for (var i=0; i < 3; i++)
Nochmal zum Allgemeinverständnis: Warum wird var i=0 nur am Anfang und i++ immer ausgeführt? Ich meine, theorethisch, müsste doch beides immer ausgeführt werden, oder?


Momentan sieht das so aus:

JavaScript teil

<script language="JavaScript">
<!--
function ausgabe()
{
alert (wert);
}

function get_fe_value()
{
for (var i=0; i < 3; i++)
{
if (document.orderform.fe.checked)
{
var wert = document.orderform.fe.value;
}
}
}


HTML Teil Frage

<form action="input_radio.htm">
<p><font size="+1"><u>dein Name?</u></font>?</p>
<p>
<input type="radio" name="fe" value="1"> Hans<br>
<input type="radio" name="fe" value="2"> Horst<br>
<input type="radio" name="fe" value="3"> Erwin
</p>
</form>


HTML Teil Button:

<form name="Test" action="">
<input type="button" value="Auswertung"
onclick="get_fe_value(); ausgabe()">
</form>


Bloß leider passiert nichts, wenn ich auf den Button drücke.
 
Zuletzt bearbeitet:
Eine for-Schleife besteht nun mal aus (Zähler, dem Ende, und den Schritten / der "to-do-Anweisung").
Es wurde halt so festgelegt das nur die "to do"-Anweisung ausgeführt wird, was stört dich daran? Ist doch mehr als logisch und übersichtlich.
 
BomberDeluxe schrieb:
Nochmal zum Allgemeinverständnis: Warum wird var i=0 nur am Anfang und i++ immer ausgeführt? Ich meine, theorethisch, müsste doch beides immer ausgeführt werden, oder?
Wenn immer beides ausgeführt werden würde, würde i durch das i=0 nie größer als 1 werden. Umgeschrieben als while-Schleife würde das so aussehen:
Code:
var i = 0;
while(i < 3) {
  // tu was
  i++;
}
 
Oh, sorry, das wusste ich nicht :o

Wie gesagt, ich hab mir eine For schleife anders beigebracht.



Kann jemand was zum code sagen?
Ergänzung ()

Also, hier mal die ganze Seite.
Ich hab das ganze noch ein bisschen umgeschrieben, um etwaige Fehler mit dem Alert zu umgehen.

<html>
<head>
<title></title>

<script language="JavaScript">
<!--

var wert;

function get_fe_value()
{
for (var i=0; i < 3; i++)
{
if (document.orderform.fe.checked)
{
var wert = document.orderform.fe.value;
}
}
}

function ausgabe()
{
alert (wert);
}

//-->
</script>

<meta name="author" content="Toni">
</head>
<body text="#D9EEF5" bgcolor="#0D0611" link="#FF0000" alink="#FF0000" vlink="#FF0000">


<form action="input_radio.htm">
<p><font size="+1"><u>dein Name?</u></font>?</p>
<p>
<input type="radio" name="fe" value="1"> Hans<br>
<input type="radio" name="fe" value="2"> Horst<br>
<input type="radio" name="fe" value="3"> Erwin
</p>
</form>
<br>

<form name="Test" action="">
<input type="button" value="Auswertung"
onclick="get_fe_value()">
</form>

<form name="Test" action="">
<input type="button" value="Auswertung2"
onclick="ausgabe()">
</form>

</body>
</html>


Einen kleinen Fortschritt habe ich schon gemacht. Den dick gedruckten Teil, habe ich hinzugefügt. Jetzt habe ich immerhin schon eine Ausgabe, auch wenn diese noch "undefined" ist.
Was ich denke: Kann es sein, dass der Fehler irgendwo in der unterstrichenen Zeile ist? Vielleicht wird der Variablenwert nicht richtig übernommen, keine Ahnung...
 
Hallo,

hier das verbesserte und lauffähige Dokument:

HTML:
<html>
<head>
<title></title>

<script language="JavaScript">
<!--

var wert;

function get_fe_value()
{
	for (var i = 0; i < document.forms["quizform"].fe.length; i++)
	{
		if (document.forms["quizform"].fe[i].checked)
		{
			wert = document.forms["quizform"].fe[i].value;
		}
	}
	ausgabe();
}

function ausgabe()
{
	alert(wert);
}

//-->
</script>

<meta name="author" content="Toni">
</head>
<body text="#D9EEF5" bgcolor="#0D0611" link="#FF0000" alink="#FF0000" vlink="#FF0000">


<form action="input_radio.htm" name="quizform">
<p><font size="+1"><u>dein Name?</u></font></p>
<p>
<input type="radio" name="fe" value="1"> Hans<br>
<input type="radio" name="fe" value="2"> Horst<br>
<input type="radio" name="fe" value="3"> Erwin
</p>
</form>
<br>

<form name="Test" action="">
<input type="button" value="Auswertung"
onclick="get_fe_value()">
</form>

</body>
</html>

Erklärung:

for (var i = 0; i < document.forms["quizform"].fe.length; i++)

=> FÜR JEDES ELEMENT IN "QUIZFORM" VOM NAMEN "FE" TUE
Gängige Methode zum durchgehen von Arrays.

if (document.forms["quizform"].fe.checked)

=> Ist das aktuelle Element von "FE" angekreuzt?

wert = document.forms["quizform"].fe.value;

=> Weise der Variablen wert die Eigenschaft Value des Radio-Buttons zu.


Also nochmal kurz allgemein:

Eine <form> sollte ein "name" Attribut haben. In deinem Fall z.B "quizform".
in dieser Form stecken Inputelemente. In deinem Fall Radiobuttons. Diese haben auch einen Namen. z.B. "auswahl".
Wie greifst du nun darauf zu?

document.forms["quizform"].auswahl

dadrin steckt jetzt alles was auswahl heisst. Bei Radio Buttons sind es mehr als ein Element. Also wird das ganze als Array (Feld, Liste) angelegt und mit einem numerischen Index versehen (Beginnend bei 0). Also nehmen wir an du willst das 2. Element in die Griffel bekommen.

document.forms["quizform"].auswahl[1]

1 weil von 0 beginnend gezählt wird. 0 = 1, 1=2, 2=3 usw..

Deswegen baut man sich eine For Schleife welche durch alle Elemente durchgeht. Beginnend bei 0 also. (for var i = 0)
Man endet bei der Zahl die kleiner ist als die Gesamtanzahl (also bei 3 Elementen ist es 2)
(i < document.forms["quizform"].fe.length)
und nach jedem Durchgang dieser Schleife geht man zum Nächsten Element (mithilfe von i++)
 
Zuletzt bearbeitet: (Nähere Erläuterung)
Genau sowas hab ich gesucht!
Vielen Dank!

Ich melde mich dann, wenn es wieder Probleme gibt ;)


Endlich fertig, das Werk ist vollbracht!

Und ich hab eine ganze Menge gelernt, vielen Dank an alle!
 
Zuletzt bearbeitet:
Zurück
Oben