hallo miteinander,
Hallo ron,
meines Wissens nach liegt das Problem in dieser Zeile:
document.write(anzMinuten + ":" + anzSekunden);
Die write-Funktion schreibt natürlich Text in Deine Seite, jedoch funktioniert das so nicht. Mit der Funktion kann man folgendes machen:
document.open();
document.write('<html><head></head><body>');
document.write('Das Ergebnis: ' + String(a+b));
document.write();
document.write('</body></html>');
document.close();
Dann hast Du eine neue HTML-Seite - und zwar eine komplett neue. Oder Du nutzt es als Einbettung:
siehe dazu das Beispiel von http://selfhtml.teamone.de/javascript/objekte/document.htm#write
Würde Deine Idee funktionieren, dann würde aber das Ergebnis z.B. nach 5 Sekunden so aussehen:
20:0520:0620:0720:0820:09
selbst mit einem "document.writeln" sähe es dann so aus:
20:05
20:06
20:07
20:08
20:09
Für Deinen Anwendungsfall gibt es theoretisch zwei Möglichkeiten:
1. Möglichkeit (2 Dateien):
Datei "uhr.js":
---------------
var Start = Jetzt.getTime();
function ZeitAnzeigen() {
var absSekunden = Math.round(ZeitBerechnen());
var relSekunden = absSekunden % 60;
var absMinuten = Math.abs(Math.round((absSekunden-30)/60));
var anzSekunden ="" + ((relSekunden > 9) ? relSekunden : "0" + relSekunden);
var anzMinuten ="" + ((absMinuten > 9) ? absMinuten : "0" + absMinuten);
document.open();
document.write('<html><head><script type="text/javascript"> var Jetzt=' + Jetzt + '</script>');
document.write('<script type="text/javascript" src="uhr.js"> </script> </head><body>');
document.write(anzMinuten + ":" + anzSekunden);
document.close();
window.setTimeout('ZeitAnzeigen()',1000);
}
function ZeitBerechnen() {
var Immernoch = new Date();
return((Immernoch.getTime() - Start)/1000);
}
HTML-Datei:
-----------
<html>
<head>
<title>Aufenthaltsdauer auf Web-Seite anzeigen</title>
<script type="text/javascript">
<!--
var Jetzt = <? echo date("H:i");?>;
// -->
</script>
<script type="text/javascript" src="uhr.js"></script>
</head>
<body bgcolor="#EEEEEE" text="#000000" onLoad="window.setTimeout('ZeitAnzeigen()',1000)">
</body>
</html>
Problem: Kann auf langsamen oder anderweitig beschäftigten PC's ein bißchen doof aussehen, vor allem, wenn diese HTML-Seite mal später größer wird oder Bilder bekommt.
2. Möglichkeit (objektorientiert):
Du bleibst bei der ursprünglichen Idee aus dem Beispiel:
Dieses 'Objekt' "window.document.Anzeige.Zeit.value" kann man eben bei vielen (auch alten) Browsern ansprechen, weil Formulare und das Abfragen oder Vorbelegen der Formularelemente schon seit Ewigkeiten zum Standardrepartoire der Browser gehören.
Vorausgesetzt, die Leute surfen mit MSIE 5.5 oder NN 6.0 oder höher, kannst Du auf das DOM zurückgreifen (siehe Javascipt-Beschreibung in SELFHTML). Da geht dann sowas:
im javascript-teil:
document.getElementById('uhrzeit').nodeValue = 'aktuelle Zeit:' + min + ':' + sec
im HTML-Teil:
<div id="uhrzeit"></div>
Willst Du aber auch ältere Browser unterstützen, dann wird's schwierig. Dann mußt Du nämlich prüfen, welchen Browser der Surfer nutzt und dann anstelle vom DIV-Objekt ein LAYER-Objekt benutzen (NN 4.7x) oder über das 'document.all'-Objekt aus dem MSIE 4.x zum eigentlichen Objekt kommen.
In jedem Fall mußt Du aber den neuen Wert quasi an ein Objekt übergeben. Mit document.write kann man solche dynamischen Sachen nicht umsetzen. Denn die erste Möglichkeit ist ja nicht wirklich dynamisch.
Wenn das mit dem Editfeld nicht mehr als ein kleiner Schönheitsfehler ist, dann lohnt sich der Aufwand aus meiner Sicht nicht.
Gruß,
Andreas
PS: etwas Abwechslung gesucht? http://schigold.de/spiel/