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

Skript funktioniert nur bei erstem Aufruf

J

j-l-n

Guest
Folgendes Dokument:
HTML:
<!DOCTYPE html>
<html>
	<head>
		<title>Test</title>
		<meta charset="utf-8">
		<script src="jln.js"></script>
	</head>
	<body>
		<script>
			function callbackFunction(){
				alert("Fertig geladen.");
			}
			window.DOMready(callbackFunction);
		</script>
		<button onclick="window.DOMready(callbackFunction)">Testen: wenn bereits fertig geladen</button>
	</body>
</html>

Auszug der betreffenden Stelle aus jln.js:
Code:
	var DOMready = function DOMready(callback){
		var isReady = function isReady(alreadyLoaded){
			if(alreadyLoaded){
				callback();
			}
			else{
				if(document.addEventListener){
					document.removeEventListener("DOMContentLoaded", isReady);
				}
				else if(document.attachEvent){
					document.detachEvent("onload", isReady);
				}
				callback();
			}			
		}
		if(document.readyState === "completed" || document.readyState === "interactive"){ //if parsing of document is already finished
			isReady(true);
		}
		else{
			if(document.addEventListener){
				document.addEventListener("DOMContentLoaded", isReady);
			}
			else if(document.attachEvent){
				document.attachEvent("onload", isReady);
			}
		}
	}
	window.DOMready = DOMready;

Beim Aufruf der Seite erscheint wie erwartet das alert().
Wenn ich aber auf den Button klicke, wird der Callback nicht ausgeführt. Wieso?
 
Was erwartest du denn nach dem Klick auf den Button? Der Klick macht m.E. genau was er soll. Da aber zum Zeitpunkt des Klicks das Event "DOMContentLoaded" längst vorbei ist passiert nichts. Oder?

https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded :
The DOMContentLoaded event is fired when the document has been completely loaded and parsed, without waiting for stylesheets, images, and subframes to finish loading (the load event can be used to detect a fully-loaded page).

Ansonsten müsstest du wahrscheinlich auf "complete" und nicht auf "completed" abfragen, falls das Script anders gemeint ist. Zumindest gilt das für den IE.
 
Der Klick macht m.E. genau was er soll. Da aber zum Zeitpunkt des Klicks das Event "DOMContentLoaded" längst vorbei ist passiert nichts. Oder?
Genau deswegen die Zeile
Code:
if(document.readyState === "completed" || document.readyState === "interactive"){ //if parsing of document is already finished
			isReady(true);
}
, falls das DOMready() aus irgendeinem Grund erst nach dem Laden des Dokuments nachträglich eingebunden und ausgeführt werden sollte.

Ansonsten müsstest du wahrscheinlich auf "complete" und nicht auf "completed" abfragen
Na klar, logisch. Solche Vertipper sind immer schwer zu finden. Danke dir!
 
Zurück
Oben