let ist ähnlich wie var aber mit dem Unterschied, wie bei deinem Beispiel, dass, wenn der Click-Handler aufgerufen wird, er wieder den selben Variablenwert vorfindet, wie zu dem Zeitpunkt als er registriert wurde. Während bei var er den Endwert nach Durchlauf der Schleife vorfindet.
Beiträge von Sempervivum
-
-
-
Beliebter Fehler, es passiert folgendes: Die Eventlistener werden registriert und die Schleife ist zu Ende. Danach hat a den Wert 3. Wenn jetzt später geklickt wird, funktioniert nichts, weil es für 3 keine Elemente gibt.
Abhilfe, indem man "let" verwendet:
Das ganze sollte auch viel einfacher gehen: Gib den Pfeilbuttons eine einheitliche Klasse und verwende dieses jquery:
-
Bastis Empfehlungen waren soweit alle richtig. Ich würde das Zurücksetzen der Formularelemente dem Reset überlassen und nur die, die damit nicht abgedeckt sind, ausprogrammieren. Also ein Resetbutton wie in Posting #5 und dann die Funktion:
-
Zitat
Absolute und relative positionierungen verstehe ich ja,aber was macht die positionierung "STATIC", was macht die den genau?
Static ist der Defaultwert, der gültig ist, wenn man nichts anderes angibt. Die Elemente werden dann nacheinander angeordnet, so wie man sie im HTML notiert.
-
Der IE macht häufig Probleme, aber in diesem Fall habe ich keinen Anhaltspunkt dafür, dass es daran liegt. Du kannst trotzdem probeweise einen anderen Browser testen.
Versuche, einen Checkpoint in den Code einzubauen und beobachte die Console:
-
Zitat
was ist das onreadystatechange?
Damit meine ich dies:
CodehR.onreadystatechange = function(){ if ( hR.status == 200 && hR.readyState == 4 ){ strResponseText = hR.responseText; Zeichnen(strResponseText); } };
Dort wird die Funktion Zeichnen() aufgerufen, sobald die Antwort vom Server eintrifft und Du darfst sie auch nur dort aufrufen, weil sonst die Daten nicht zur Verfügung stehen.
ZitatWarum aktualisiert er das denn nur wenn ich die console offen habe ?
Dafür habe ich keine Erklärung. Bist Du sicher, dass er nicht aktualisiert, wenn die Console nicht offen ist?
-
Mal ins Blaue geraten: Die Funktion Zeichnen() darfst Du nur im onreadystatechange aufrufen. Rufst Du sie vielleicht noch irgend wo anders auf?
-
Hat er das nicht gemacht, als Du die Seite noch neu geladen hast? Vermute, dass das neu Zeichnen nicht optimal organisiert ist. Aber schwer zu sagen, wenn man den Code nicht in Aktion sehen kann.
-
Ich meine gar nichts. In der Funktion aktualisieren() wird ja die Funktion Zeichnen() aufgerufen. Den Code, mit dem sie definiert wird, musst Du natürlich bei behalten.
Wenn er nicht aktualisiert, muss das einen anderen Grund haben. Ist irgend etwas in der Console zu erkennen?
-
Ah, jetzt verstehe ich, Du aktualisierst die ganze Seite, nur um die Daten zu aktualisieren. Da Du den Ajax-Code ja schon hast, ist es eine Kleinigkeit, es umzustellen: Den Code in eine Funktion packen und diese mit setInterval zyklisch aufrufen:
Code
Alles anzeigenfunction aktualisieren() { var hR = new XMLHttpRequest(); var strResponseText = ""; hR.onreadystatechange = function(){ if ( hR.status == 200 && hR.readyState == 4 ){ strResponseText = hR.responseText; Zeichnen(strResponseText); } }; hR.open("GET", "seite.php", true); hR.send(null); } setInterval(aktualisieren, 3000);
-
Zitat
er aktualisiert die ganze Geschicht nur über einen separaten Befehl.
Was heißt das genau? Was aktualisiert er, die ganze Seite oder nur bestimmte Daten/Inhalte? Poste den Code dieses separaten Befehls.
ZitatWas muss ich denn ändern damit er mir die Daten regelmäßig zieht?
Die Daten zyklisch abfragen durch die Verwendung von setInterval().
-
Zitat
welche ich hart positioniert habe und welche ich auch von der Größe hart programmiert habe.
Das ist genau der Feind bei deinem Vorhaben, dass sich die Seite an verschieden Bildschirmauflösungen anpasst, d. h. sich responsiv verhält. Wahrscheinlich wirst Du nicht darum herum kommen, dies komplett zu überarbeiten und mit relativen Abmessungen zu arbeiten und auf absolute Positionierung zu verzichten.
-
Zitat
Im ersten Bild ist zu sehen, wie ich die Daten vom Webserver ziehe und diese Daten in Zeichnen(strResponseText) speicher.
Im zweiten Bild werden diese Daten der function übergeben und geparsed.
Jetzt möchte ich das alles mit AJAX machen und immer nur die Daten aktualisieren und nicht die ganze Seite.
Verstehe nicht ganz: Was Du da in deinem ersten Bild zeigst ist Ajax. Wenn trotzdem deine ganze Seite aktualisiert wird, musst Du irgend wo einen Fehler machen, der aber aus den beiden Bildern nicht zu erkennen ist. Am besten postest Du mal die URL der Seite, damit man es sich in Aktion ansehen kann.
-
Danke, jetzt ist es klar, Du benutzt Ajax, um das Feld zyklisch zu aktualisieren.
Zitatund wenn das jetzt mit einem einfachen echo funktioniert von meiner database.php eine betimmte variable auszugeben,
wär ich schon glücklich.... nur weiß ich nicht wie.
Dann poste doch Mal den Code der database.php, dann kann man dir zeigen, wie es geht.
-
Ja, das geht z. B. mit diesem Javascript:
Code
Alles anzeigenfunction shuffle(a) { var j, x, i; for (i = a.length - 1; i > 0; i--) { j = Math.floor(Math.random() * (i + 1)); x = a[i]; a[i] = a[j]; a[j] = x; } } var nrtohighlight = 23; var tbl = document.getElementById("table1"); var nrrows = tbl.rows.length; var idxes = []; for (var i = 0; i < nrrows; i++) { idxes.push(i); } shuffle(idxes); for (var i = 0; i < nrtohighlight; i++) { tbl.rows[idxes[i]].classList.add("highlight"); }
Das Prinzip ist, ein Array mit den Indizes zu erzeugen, und zu mischen (shuffle), so dass die Reihenfolge zufällig wird. Dann die ersten 23 Indizes nehmen und die Zeile, die dazu gehört, hervorheben, hier durch Hinzufügen einer Klasse und Zuweisen einer Hintergrundfarbe.
-
Das wirkt auf alle Elemente, bei jsfiddle im iFrame mit dem Ergebnis. Das Ergebnis ist schwer vorher zu sagen und kann überraschen, wie man hier sieht. Der Grund ist, das das style-Element als Standardeigenschaft display:none hat und man den Inhalt, d. h. das CSS, mit display:inline-block sichtbar macht.
-
Genau, das ist ein Akkordeon. Ich denke, so ist es einfacher:
-
- Entweder indem Du nur diese eine mit echo ausgibst und sonst nichts
- Oder indem Du sie in ein Array einträgst, nach JSON kodierst und mit Javascript auswertest.
Edit: Unklar: Benutzt Du nur Ajax und includierst Du die Datei? In deinen letzten Beispielen sehe ich letzteres.
-
Weniger ein CSS-Befehl, der das macht, sondern mehr einer, der das verhindert: position:absolute
Dies ist einer der Gründe, warum man nach Möglichkeit absolute Positionierung vermeiden sollte.
Schau dir von jQuery slideUp() und slideDown() an.