• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Lottospiel

newYear

New member
Halllo Freunde
Erst mal, wünsche ich allen sinnliche Feiertage.
Ich bringe mir gerade Javascript bei. Eine Aufgabe ist, ein kleines Lottospiel zu erstellen, in einer Multiple list, kann der User die Zahlen auswählen. Er klickt dann auf den Button und unter dem Button werden ihm zur Bestätigung seine Zahlen angezeigt.
Den Part mit der Anzeige kriege ich nicht hin, könnte jemand bitte einen Blick drüber werfen?
Folgend der HTML-Code:
HTML:
<!doctype html>
<html lang ="DE">
<head>
<meta charset ="UTF-8">
<title>Lotto</title>
</head>
<body onload ="createNumbers()">

<h1>Spiel begin</h1>

<form action="">
<label for="lottoNum">
Wähle 6 Lottozahlen:
</label>
<select
id="lottoNum" 
name="Lottozahlen"
multiple="multiple" 
size="42"
aria-required="true">
</select>

<input
type ="submit"
name ="checkNum"
value ="Habe ich gewonnen?"
onclick ="showOptions()">
</form>

<main id ="output">
</main>
<script src ="scripts/main.js"></script>
</body>
</html>
Ich denke, das ist hier alles klar. Im Main ist später dann die Ausgabe.
Hier das Javascript:
HTML:
"use strict";
function createNumbers()
{
let numbers =document.getElementById("lottoNum");
for(let i =1; i<42; i++)
	{
let option =document.createElement('option');
option.text =option.value =i;
numbers.add(option);
	}

}
Dieser Codeabschnitt ist denke ich zum grössten Teil selbsterklärend. Ich befülle die Selectbox mit den Nummern.
Das Funktioniert auch problemlos.
Hier ist nur eine Frage zum Verständnis aufgetaucht:
let option =document.createElement('option');
Hier erstelle ich einfach eine Option, shehe ich das richtig?
option.text =option.value =i;
Diese Zeile hier verstehe ich nicht ganz, dass ich der variable Optionden wert i zuweise, ist klar, aber was davor passiert. Könnte mich bitte jemand aufklären?

HTML:
function showOptions()
{
let numbers =document.getElementById("lottoNum");
let result ="<h1>Deine Zahlen</h1>";
result +="<ul>";

for(let i=0; i<numbers.length; i++)
	{
let currentNum =numbers[i];
if(currentNum)
{
result +="<li>" + currentNum.value + "</li>";
		}
}
result +="</ul>";
  let output = document.getElementById("output");
  output.innerHTML = result;
}
Hier das wichtigste, das funktioniert einfach nicht. Die Zahlen werden mir nicht angezeigt.
Weiss jemand rat?
Vielen Dank für eure Antwort :D
 
Zuletzt bearbeitet von einem Moderator:
option.text =option.value =i; weist option.text und option.value den Wert von i zu. Man könnte es ebenfalls so schreiben: option.text=i;option.value=i;.

let option =document.createElement('option'); weist der Variablen "option" ein HTML <option>-Element zu.

Wenn der Knopf "Habe ich gewonnen?" gedrückt wird, wird das Formular abgesendet, und die Seite neu geladen. Das macht nur Sinn, wenn du die Zahlen serverseitig z.B. mit PHP auswerten willst. Das ist hier aber unnötig. Ändere dafür das Attribut "type" des input-Knopfes in "button".

Mit dieser Änderung zeigt die Funktion shopOptions() alle Optionen an. Um nur die gewählten Zahlen zu zeigen, nutze dieses Script, das auf deiner ursprünglichen Funktion basiert:
Code:
function showOptions(){
	let numbers =document.getElementById("lottoNum");
	let result ="<h1>Deine Zahlen</h1>";
	result +="<ul>";
	for(let i=0; i<numbers.length; i++)	{
		if(numbers[i]&&numbers[i].selected)
			result +="<li>" + numbers[i].value + "</li>";
	}
	result +="</ul>";
	let output = document.getElementById("output");
	output.innerHTML = result;
}
 
@Paul, Danke für die Erklärungen, es funktioniert jetzt auch..
Damit ich das verstehe:
Wieso ist mein Ansatz nicht gegangen? Also, das ich eine lokale Variable erstelle, dieser die aktuelle Option zuweise und dan mit dem if-Statement auf true vergleiche? Du hast einen&&-Operator verwendet, wieso überprüfst du doppelt? Wegen Text und Value?
 
Bei deinem Code prüfst du nicht auf numbers[i].selected, sondern nur, ob der Wert numbers[i]vorhanden ist und keinen falschen Wert hat. Den Ansatz habe ich dann einfach um das fehlende numbers[i].selected ergänzt, weil genau dort drinsteht, ob der Wert ausgewühlt wurde, oder nicht.
 
@Paul, vielen Dank. Tatsächlich ist mir jetzt ein Licht aufgegangen, ich überprüfe ja nur ob true oder false, sonst nichts besonderes :D
 
Zurück
Oben