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

Javascript-Alert und Chrome

tsseh schrieb:
dann sollte ein fehler kommen
Nee kommt nix, die Konsole ist leer.

tsseh schrieb:
beim klick auf die alertbox ändert sich das "Au weia" wieder in "text, test"? das wäre ja noch schlimmer
Nee, während des Alerts ist die Seite weiß, erst beim wegklicken steht da text,test und dann Au weia.


Yogilein schrieb:
Mein neuestes Spiel verzichtet übrigens komplett auf Alert- und Confirm-Fenster
Das ist vernünftig, es gibt auch:
jQuery Alert Dialogs
 
tsseh schrieb:
wenn man dann die box wegklickt, was passiert dann?
Sorry für meine unkollegiale Ausdrucksweise. "Au weia" erscheint natürlich erst wenn man die Box weggeklickt hat.
Und die Seite ist während des Alerts komplett leer, sprich weiß.
 
Zuletzt bearbeitet:
Es kommt noch schlimmer, denn ich habe gerade festgestellt, wenn beim neuen Chrome ein Alert-Fenster erscheint, stoppt die Wiedergabe von Sounddateien. Es wird noch kurz weitergespielt, dann hört es auf. Ich meine Dateien, die mit dem Audio-Tag abgespielt werden. Klickt man das Alert-Fenster wieder weg, kommt auch die Musik wieder.
 
Was wurde geändert?
js hat keine nebenläufigkeiten, wird in einem thread abgearbeitet.
jeder js-zweig läuft vollständig durch, ehe der nächste abgearbeitet wird.
wenn du ins html 2 scripte einbindest, wird der globale code des 1. in die ablauf-queue eingetragen und abgearbeitet.
dann erst wird das 2. script geladen, und dessen globaler code in die ablauf-queue eingetragen und abgearbeitet.
registrieren diese script eventhandler und das entsprechende event schlägt zu, wird der entsprechende handlercode in die ablauf-queue eingetragen und abgearbeitet wenn aller code vorher abgearbeitet wurde.
diese arbeitsweise ist bedingung für konsistenten code in js.
wenn ich also folgenden code irgendwo stehen habe
Code:
document.body.innerHTML += '<div id="test"></div>';
...
document.getElementById('test').innerHTML = 'test';
kann ich mich darauf verlassen, dass der funktioniert, egal was in ... steht(solange ich dort nicht selbst das element wieder entferne), da jede weitere benutzeraktion, welche dafür sorgen könnte dass dieses element wieder gelöst wird
Code:
document.body.innerHTML = "Au weia";
erst dann ausgeführt wird, wenn der 1. code vollständig abgearbeitet wurde.
sprich
Code:
setTimeout(function()
{
  document.body.innerHTML = "Au weia";
}, 0);
document.body.innerHTML += '<div id="test"></div>';
...
document.getElementById('test').innerHTML = 'test';
sind 2 codezweige, der globale code, der den timeout-event-handler registriert, dann das div mit id="test" im dom erzeugt, dann irgendwas(...) macht und dann auf das div mit id="test" zugreift.
der 2. codezweig ist der code des timeout-event-handlers, der im dom alle kindelemente von body löscht und einen textknoten "Au weia" erzeugt.
da der timeout auf 0 gesetzt wurde, kommt das timeout-event sofort, also während der globale code noch abgearbeitet wird. der code des timeout-event-handlers wird aber nur in die ablauf-queue eingetragen, abgearbeitet wird er erst, wenn der globale code vollständig abgearbeitet wurde.
wenn jetzt aber an stelle von ... alert("irgendwas") steht, wird an dieser stelle die alertbox(ein modaler dialog)angezeigt und die codeausführung geht erst weiter, wenn die alertbox weggeklickt wurde.
bisher war es so, daß solange auf das wegklicken der alertbox gewartet wurde, die anderen codezweige abgearbeitet wurden, obwohl der codezweig mit dem alert ja noch nicht vollständig abgearbeitet wurde. das darf in js eigentlich nicht passieren.
in unserem beispiel wurde(wird im ff immer noch) also der code des timeout-event-handlers abgearbeitet, welcher alle elemente unter body löscht.
wenn dann der globale code weiter abgearbeitet wird, weil die alertbox weggeklickt wurde, und wir dort auf das div mit id="test" zugreifen wollen war es aber schon gelöscht.

Und was bedeutet das für uns (Hobby) Entwickler?
vermutlich nichts
 
Und was bedeutet das für uns (Hobby) Entwickler?
Für mich bedeutet das ein komplettes Umdenken.

Bisher konnte ich so coden:

Funktion Spielablauf
Zeige Spielzug an
Gib die Meldung "Toll gemacht" per Alert aus
Mische neu und zeige die neue Anordnung an​
Ende Funktion

Das funktioniert so nicht mehr, da das Alert vor der Anzeige des Spielzuges erscheint. Und da nach dem Alert sofort neu gemischt wird, ist der Spielzug auch dann nicht zu sehen.

Ich muss das jetzt so machen:

Fuktion Auswertung
Zeige Spielzug an
Rufe Funktion zur Ausgabe per setTimeout auf
Ende Funktion

Funktion Ausgabe + weitere Schritte
Gib die Meldung "Toll gemacht" per Alert aus
Mische neu und zeige die neue Anordnung an
Ende Funktion
 
Mir fällt da gerade was ein.
Was ist wenn man die Seite nach einem Alert neu laden möchte.
alert("Deise Seite wird jetzt neu geladen");
location.reload();

Das alert macht ja dann gar kein sinn mehr:confused:
 
Mir fällt da gerade was ein.
Was ist wenn man die Seite nach einem Alert neu laden möchte.
alert("Deise Seite wird jetzt neu geladen");
location.reload();
ja was? ich verstehe das scenario nicht ganz. wozu soll das gut sein?

Das alert macht ja dann gar kein sinn mehr:confused:
alerts haben noch nie sinn gemacht.
die sind meiner meinung nach wie document.write nur für anfänger gut, die mal schnell was anzeigen möchten.
Code:
var x = 7;
var y = 2 * x + 3;
alert(y);
 
Zurück
Oben