• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Browser lackt bei Javascript ausführung

Status
Für weitere Antworten geschlossen.

gollum1990

Neues Mitglied
Hallo Forum,

wir haben ein Problem mit einem Script, dieses Script soll 4 verschiedene GMT(Greenwich Mean Time) Zeiten anzeigen, aber nach 5 Sekunden lackt der Browser und hängt sich auf, komisch was? Sonst funktioniert es wunderbar.

Hier der Link:
http://bvs-intern.dyndns.org/~hanseb01/Uhrzeit/$GMT.html

Es wäre nicht ratsam darauf zu gehen ^^

Hier die Source:
HTML:
<html>
<head>
<title>Uhrzeiten von vier verschiedenen Städten</title>
<script type="text/javascript">



function uhrzeit(Stadt) {

switch(Stadt) {

     case 'London':
     
     var Londonzeit = new Date();
     var Stunden = Londonzeit.getHours() - 1;
     var Minuten = Londonzeit.getMinutes();
     var Sekunde = Londonzeit.getSeconds();
     if(Stunden < 10) {
        var Stunden = "0"+Stunden;
     }
     if(Minuten < 10) {
        var Minuten = "0"+Minuten;
     }
     if(Sekunde < 10) {
        var Sekunde = "0"+Sekunde;
     }
     document.getElementById('London').innerHTML = "London: "+Stunden+":"+Minuten+":"+Sekunde+"<br>";
     break;


     case 'Berlin':

     var Berlinzeit = new Date();  
     var Stunden = Berlinzeit.getHours();
     var Minuten = Berlinzeit.getMinutes();
     var Sekunde = Berlinzeit.getSeconds();  
     if(Stunden < 10) {
        var Stunden = "0"+Stunden;
     }
     if(Minuten < 10) {
        var Minuten = "0"+Minuten;
     }
     if(Sekunde < 10) {
        var Sekunde = "0"+Sekunde;
     }
     document.getElementById('Berlin').innerHTML = "Berlin: "+Stunden+":"+Minuten+":"+Sekunde+"<br>";
     break;


     case 'Vilnius':

     var Vilniuszeit = new Date();
     var Stunden = Vilniuszeit.getHours() + 1;
     var Minuten = Vilniuszeit.getMinutes();
     var Sekunde = Vilniuszeit.getSeconds(); 
     if(Stunden < 10) {
        var Stunden = "0"+Stunden;
     }
     if(Minuten < 10) {
        var Minuten = "0"+Minuten;
     }
     if(Sekunde < 10) {
        var Sekunde = "0"+Sekunde;
     }
     document.getElementById('Vilnius').innerHTML = "Vilnius: "+Stunden+":"+Minuten+":"+Sekunde+"<br>";     
     break;


     case 'Moskau':

     var Moskauzeit = new Date();
     var Stunden = Moskauzeit.getHours() + 2;
     var Minuten = Moskauzeit.getMinutes();
     var Sekunde = Moskauzeit.getSeconds(); 
     if(Stunden < 10) {
        var Stunden = "0"+Stunden;
     }
     if(Minuten < 10) {
        var Minuten = "0"+Minuten;
     }
     if(Sekunde < 10) {
        var Sekunde = "0"+Sekunde;
     }
     document.getElementById('Moskau').innerHTML = "Moskau: "+Stunden+":"+Minuten+":"+Sekunde+"<br>";
     break;
}
setTimeout('uhrzeit("London")', 1000);
setTimeout('uhrzeit("Berlin")', 1000);
setTimeout('uhrzeit("Vilnius")', 1000);
setTimeout('uhrzeit("Moskau")', 1000);
}
</script>
</head>

<body>

<!-- Ist eigentlich ziemlich egal, was für ne Stadt steht, es starten alle -->

<input type="submit" onclick="uhrzeit('London')" value="Starten">


<div id="London"></div>

<div id="Berlin"></div>

<div id="Vilnius"></div>

<div id="Moskau"></div>

</body>
</html>

Ich hoffe ihr könnt uns bei diesen Problem helfen

MFG gollum1990
 
Versuch mal nicht alle Zeiten gleichzeitig berechnen zu lassen, sondern das zu verzögern.
Und den TimeOut nur dann starten, wenn der jeweilige CASE aufgerufen wurde !

Code:
setTimeout(..., 300);
setTimeout(..., 500);
setTimeout(..., 800);
setTimeout(..., 1000);

Ansonsten kann ich nur sagen, dass dein Code meinen FF zum Absturz gebraucht hat, daher ist ein fixing im LIVE Betrieb für mich nicht Möglich :(
 
Ich hab das Script jetzt nicht ausgeführt, aber versuch mal folgendes:

Zuerst ist es unnötig, den Stadtnamen mit an die Funktion zu übergeben. Besser, wenn du die Funktion nur einmal aufrufst und in dieser Funktion dann alle Änderungen getätigt werden. Dann wird auch die Switch-Case-Abfrage unnötig. Außerdem brauchst du keine 4 Date-Objekte. Es reicht, wenn du bei jedem Funktionsaufruf das Date-Objekt einfmal definierst und von diesem die Zeiten abziehst/ addierst. Außerdem ist setTimeout() nicht für sowas gedacht, benutze besser setInterval() hinter der Funktion.

Ich weiß jetzt nicht, ob das zu der Idee deines Scriptes passt, aber am besten, wenn du nur eine Box mit allen Zeiten nimmst. Wenn du das nicht willst, dann versuchs mal ohne das <br> am Ende und dafür mit .firstChild.nodeValue statt .innerHTML zum reinschreiben - ich glaube, bei innerHTML muss der Browser mehr arbeiten, besonders, wenn es oft aufgerufen wird.
 
Gut, ich werde es jetzt so umschreiben.

Edit:

Es klappt wunderbar, hier die Funktion:
HTML:
<script type="text/javascript">

function uhren() {

         o = new Date();

         s = o.getHours();
         m = o.getMinutes();
         sc = o.getSeconds();

         londonzeit = s - 1;
         berlinzeit = s + 0;
         vilniuszeit = s + 1;
         moskauzeit = s + 2;

         if(londonzeit < 10) {
            londonzeit = "0"+londonzeit;
         }
         if(berlinzeit < 10) {
            berlinzeit = "0"+berlinzeit;
         }
         if(vilniuszeit < 10) {
            vilniuszeit = "0"+vilniuszeit;
         }
         if(moskauzeit < 10) {
            moskauzeit = "0"+moskauzeit;
         }

         if(m < 10) {
            m = "0"+m;
         }
         if(sc < 10) {
            sc = "0"+sc;
         }
   
         document.getElementById('div1').innerText = londonzeit+":"+m+":"+sc;
         document.getElementById('div2').innerText = berlinzeit+":"+m+":"+sc;
         document.getElementById('div3').innerText = vilniuszeit+":"+m+":"+sc;
         document.getElementById('div4').innerText = moskauzeit+":"+m+":"+sc;
}
setInterval('uhren()', 1000);
</script>
<body onLoad="uhren()">
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.
Zurück
Oben