Liebe Forumsbesucher,
mein Code erstellt drei divs und weist diesen eine Funktion per onclick-event zu. Die divs sind zu Beginn mit "0" beschriftet. Klickt man auf ein div, zählt dieses Div jede Sekunde und zeigt die neue Zahl an, bis es bei "10" angelangt ist, dann hört es auf. Danach reagiert dieses div nicht mehr aufs Klicken. Die drei divs können - je nach Klick - unabhängig voneinander zählen. Mein erster Code sieht wie folgt aus:
Das Problem ist: Für jedes der drei div wird die gleiche Variable "Zaehlen" als setInterval verwendet. Das darf natürlich nicht sein, weil die divs unabhängig voneinander bei "10" mit dem Zählen aufhören sollen. Ich hätte zwar eine Lösung mit einem Array. Für jedes div wird im gemeinsamen Array die jeweilige Zahl gespeichert:
Aber das ist sehr unsauber, weil Zaehlen immer weiter zählt, auch wenn die "10" erreicht ist. Was, wenn ich 100 statt drei div hätte? Dann liefen alle setInterval parallel (im "Leerlauf"), was viel Rechenleistung verschwendet.
Welche Lösung gibt es ohne ein derartiges Array? Kann ich ähnlich dem ganz oben stehenden Code arbeiten, aber mit individueller Variable fürs setInterval?
Danke im Voraus für alle Antworten!
Johannes
mein Code erstellt drei divs und weist diesen eine Funktion per onclick-event zu. Die divs sind zu Beginn mit "0" beschriftet. Klickt man auf ein div, zählt dieses Div jede Sekunde und zeigt die neue Zahl an, bis es bei "10" angelangt ist, dann hört es auf. Danach reagiert dieses div nicht mehr aufs Klicken. Die drei divs können - je nach Klick - unabhängig voneinander zählen. Mein erster Code sieht wie folgt aus:
Code:
//Beim Laden des HTML-Dokuments divs erstellen
for (Zaehler = 0; Zaehler < 3; Zaehler ++) {
var Teil = document.createElement('div');
Teil.id = 'T'+Zaehler;
Teil.onclick = function () {Klick(this.id)};
Teil.innerHTML = '0';
// Zusätzlich Zuweisung eines className fürs Aussehen
document.body.appendChild(Teil);}
//Verhalten der Divs, wenn der Benutzer geklickt hat
function Klick (Teil) {
if (document.getElementById(Teil).innerHTML == '0') {
var Zaehlen = setInterval (function () {
var Zahl = Number(document.getElementById(Teil).innerHTML);
if (Zahl < 10) {
document.getElementById(Teil).innerHTML = Zahl+1;}
else {clearInterval(Zaehlen);}},1000);}
}
Code:
var Zahlen = [];
function Klick (Teil) {
var X = Teil.substr(1);
if (Zahlen[X]) {
Zahlen[X] += 1;
document.getElementById(Teil).innerHTML = Zahlen[X];}
else {
if (Zahlen[X] < 10) {
var Zaehlen = setInterval (function () {
Zahlen[X] = 1;
document.getElementById(Teil).innerHTML);},1000);}}
}
Welche Lösung gibt es ohne ein derartiges Array? Kann ich ähnlich dem ganz oben stehenden Code arbeiten, aber mit individueller Variable fürs setInterval?
Danke im Voraus für alle Antworten!
Johannes
Zuletzt bearbeitet von einem Moderator: