settimeout in eigener klasse auf eine Methode der Klasse

user2580

Grünschnabel
Hallo,
ich habe ein Problem mit window.settimeout und währe sehr dankbar, wenn mir da Jemand von euch weiterhelfen könnte.

Das Problem liegt daran, dass sich die Methode CountdownAnzeigen() nicht selbst aufrufen lässt.

Wenn ich die Methode in eine Funktion umwandle geht es problemlos.

Naja hier der Code der Klasse, der Aufruf mit settimeout steht ganz unten.
PHP:
function Countdown(CountJahr,CountMonat,CountTag,CountStunde,CountMinute,CountSekunde){
 this.CountdownJahr    = CountJahr;
 this.CountdownMonat   = CountMonat;
 this.CountdownTag     = CountTag;
 this.CountdownStunde  = CountStunde;
 this.CountdownMinute  = CountMinute;
 this.CountdownSekunde = CountSekunde;	
 this.CountdownAnzeigen();
}

Countdown.prototype.CountdownAnzeigen = function(){
	var Jetzt = new Date();
    var Countdown = new Date(this.CountdownJahr, this.CountdownMonat-1, this.CountdownTag, this.CountdownStunde, this.CountdownMinute, this.CountdownSekunde);
    var MillisekundenBisCountdown = Countdown.getTime()-Jetzt.getTime();
    var Rest = Math.floor(MillisekundenBisCountdown/1000);
    var CountdownText = "";
	var Tageh = 0;
	
	if(MillisekundenBisCountdown <= 0)CountdownText = "abgelaufen";

    if(Rest >= 31536000)
    {
        var Jahre = Math.floor(Rest/31536000);
        Rest = Rest-Jahre*31536000;

        if(Jahre > 1 || Jahre == 0)
        {
            //CountdownText += Jahre + " Jahre ";
        }
        else if(Jahre == 1)
        {
            //CountdownText += Jahre + " Jahr ";
        }
    
    }
    if(Rest >= 86400)
    {
        var Tage = Math.floor(Rest/86400);
		Rest = Rest-Tage*86400;

        if(Tage > 1 || Tage == 0)
        {
            //CountdownText += Tage + " Tage ";
			Tageh = Tage * 24;
        }
        else if(Tage == 1)
        {
            //CountdownText += Tage + " Tag ";
			Tageh = Tage * 24;
        }
    }
    if(Rest >= 3600)
    {
        var Stunden = Math.floor(Rest/3600);
        Rest = Rest-Stunden*3600;

        if(Stunden > 1 || Stunden == 0)
        {
            CountdownText += Stunden + Tageh + "h ";
        }
        else if(Stunden == 1)
        {
            CountdownText += Stunden + Tageh + "h ";
        }
    }
    if(Rest >= 60)
    {
        var Minuten = Math.floor(Rest/60);
        Rest = Rest-Minuten*60;

        if(Minuten > 1 || Minuten == 0)
        {
            CountdownText += Minuten + "m ";
        }
        else if(Minuten == 1)
        {
            CountdownText += Minuten + "m ";
        }
    }

    if(Rest > 1 || Rest == 0)
    {
        CountdownText += Rest + "s ";
    }
    else if(Rest==1)
    {
        CountdownText += Rest + "s ";
    }

    document.getElementById("test").innerHTML = CountdownText;
	window.setTimeout("this.CountdownAnzeigen()", 1000);
}


Und hier die HTML Datei mit der ich das Objekt erstelle.
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Javasript</title>
<script type = "text/javascript" src = "start.js"></script>
<script type = "text/javascript" >

</script>
<meta name="description" content=""/>
<meta name="keywords"    content=""/>
</head>
<body >
<div id="wrapper">
<div id="header"></div>
  <div id="content">
    <div id="test"></div>
  </div>

  </div>
 </body>
</html>
<script type="text/javascript">
        var objectA = new Countdown(2009,5,2,10,40,10);
</script>

Vielen dank an Alle die mir helfen möchten.
MFG
 
Hallo,

versuch das Setzen des Timeouts mal so:
Javascript:
var countdown = this;
window.setTimeout(function() { countdown.CountdownAnzeigen(); }, 1000);
Das Problem ist, dass sich das this in deinem Code auf das window-Objekt bezieht. Durch das Closure gibst du das Objekt explizit an.

Grüße, Matthias
 

Neue Beiträge

Zurück