HighDots Forums  

Countdown TAG, STUNDEN, MINUTEN und SEKUNDEN

Javascript JavaScript language (comp.lang.javascript)


Discuss Countdown TAG, STUNDEN, MINUTEN und SEKUNDEN in the Javascript forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Stephan
 
Posts: n/a

Default Countdown TAG, STUNDEN, MINUTEN und SEKUNDEN - 11-06-2009 , 03:09 AM






Hallo

ich habe hier ein Script das mir die Sekunden zurückzählt, allerdings ist
irgendwann die Variable "REST" bei 0, und der Counter bleibt stehen.. ;-)
Problem ist eigentlich erkannt, nur wie sol ich das Problem beheben?

Hier mein Script:
--------------------------------------------------------------
<script language="Javascript">
<!--

var REST = 100000;

var COUNTDOWNTEXT_TAG = "";
var COUNTDOWNTEXT_STUNDE = "";
var COUNTDOWNTEXT_MINUTE = "";
var COUNTDOWNTEXT_SEKUNDE = "";

var COUNTDOWN = setInterval(function(){

if(REST >= 86400)
{
var TAGE = Math.floor(REST / 86400);
REST = REST - (TAGE * 86400);

if(TAGE > 1 || TAGE == 0)
{
COUNTDOWNTEXT_TAG = TAGE + " Tage ";
}
else if(Jahre == 1)
{
COUNTDOWNTEXT_TAG = TAGE + " Tag ";
}
}


if(REST >= 3600)
{
var STUNDEN = Math.floor(REST / 3600);
REST = REST - (STUNDEN * 3600);

if(STUNDEN > 1 || STUNDEN == 0)
{
COUNTDOWNTEXT_STUNDE = STUNDEN + " Stunden ";
}
else if(Jahre == 1)
{
COUNTDOWNTEXT_STUNDE = STUNDEN + " Stunde ";
}
}


if(REST >= 60)
{
var MINUTEN = Math.floor(REST / 60);
REST = REST - (MINUTEN * 60);

if(MINUTEN > 1 || MINUTEN == 0)
{
COUNTDOWNTEXT_MINUTE = MINUTEN + " Minuten ";
}
else if(Jahre == 1)
{
COUNTDOWNTEXT_MINUTE = MINUTEN + " Minuten ";
}
}

if(REST > 1 || REST == 0)
{
COUNTDOWNTEXT_SEKUNDE = REST + " Sekunden ";
}
else if(REST==1)
{
COUNTDOWNTEXT_SEKUNDE = REST + " Sekunde ";
}

document.getElementById("COUNTDOWN").innerHTML = COUNTDOWNTEXT_TAG +
COUNTDOWNTEXT_STUNDE + COUNTDOWNTEXT_MINUTE + COUNTDOWNTEXT_SEKUNDE;
REST -= 1;
if(REST==0)
clearInterval(COUNTDOWN);
},1000);
//-->
</script>
---------------------------------------------------------------------------------------------


Danke

Reply With Quote
  #2  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Countdown TAG, STUNDEN, MINUTEN und SEKUNDEN - 11-06-2009 , 06:39 AM






Stephan wrote:

Quote:
ich habe hier ein Script das mir die Sekunden zur�ckz�hlt, allerdings ist
irgendwann die Variable "REST" bei 0, und der Counter bleibt stehen.. ;-)
Was soll ein Count*down* denn sonst machen?

Quote:
Problem ist eigentlich erkannt,
Tatsächlich?

Quote:
nur wie sol ich das Problem beheben?
Ich kann kein(e) Problem(e) erkennen, bis auf die folgenden:

Quote:
[...]
script language="Javascript"
(Schon seit fast 10 Jahren) ungültig, siehe <http://validator.w3.org/>.

Quote:
!--
Veraltet, fehlerträchtig. Weglassen.

Quote:
var REST = 100000;
[...]
Variablenbezeichner sollten nicht vollständig gross geschrieben werden.
Diese Schreibweise wird besser für Bezeichner von Konstanten (const-
Schlüsselwort, JavaScript 1.5+) bzw. nicht zu verändernde Variablen (alle
ECMAScript-Implementationen) reserviert.

Quote:
[...]
var COUNTDOWN = setInterval(function(){
window.setInterval(...)

Ausserdem sollte hier vor dem Aufruf ein Feature-Test stattfinden.

Quote:
[...]
document.getElementById("COUNTDOWN").innerHTML = COUNTDOWNTEXT_TAG +
IDs sind case-sensitive spezifiziert, also besser kleinschreiben, um
Schusselfehler zu vermeiden.

Quote:
COUNTDOWNTEXT_STUNDE + COUNTDOWNTEXT_MINUTE + COUNTDOWNTEXT_SEKUNDE;
Die innerHTML-Eigenschaft ist fehlerträchtig und sie zu verwenden hier auch
unnötig (keine HTML-Elemente im Wert). Verwende stattdessen die nodeValue-
Eigenschaft einer TextNode-Instanz, z.B.

var o = document.getElementById("COUNTDOWN");
if (o)
{
o.firstChild.nodeValue = "...";
}

Quote:
REST -= 1;
Oder einfach

REST--;

(Siehe jedoch obige Empfehlung zur Schreibweise des Bezeichners.)

Quote:
if(REST==0)
if (REST === 0)

ist etwas effizienter und wird heutzutage von allen gängigen
Implementationen unterstützt:

<http://PointedEars.de/es-matrix>

Quote:
clearInterval(COUNTDOWN);
window.clearInterval(...);

(Feature-Test ist hier IMHO nicht zwingend, denn man kann davon ausgehen,
dass setInterval() nicht ohne clearInterval() implementiert wird.)

Quote:
[...]
//--
Veraltet, fehlerträchtig. Weglassen.

Quote:
Danke
Gern geschehen. Deine Umlaute sind jedoch nicht deklariert; bitte stell
Deinen Newsclient richtig ein: <http://oe-faq.de/>

Bevor Du antwortest, lies bitte auch
<http://lernst.de/zitieren/kriegst.de/antworten>

Übrigens existiert de.comp.lang.javascript, wo mehr Abonnenten Deutsch
verstehen dürften: <http://dcljs.de/>


PointedEars
--
Prototype.js was written by people who don't know javascript for people
who don't know javascript. People who don't know javascript are not
the best source of advice on designing systems that use javascript.
-- Richard Cornford, cljs, <f806at$ail$1$8300dec7 (AT) news (DOT) demon.co.uk>

Reply With Quote
  #3  
Old   
Matthias Reuter
 
Posts: n/a

Default Re: Countdown TAG, STUNDEN, MINUTEN und SEKUNDEN - 11-06-2009 , 07:33 AM



Stephan schrieb:

Quote:
ich habe hier ein Script das mir die Sekunden zurückzählt, allerdings ist
irgendwann die Variable "REST" bei 0, und der Counter bleibt stehen..
;-)
Hier fehlt noch die Information, dass die Anzeige bei "1 Sekunde" stehen
bleibt. Sonst wäre ja alles wie gewünscht.

Quote:
Problem ist eigentlich erkannt, nur wie sol ich das Problem beheben?
Indem Du

Quote:
if(REST==0)
clearInterval(COUNTDOWN);
},1000);
ersetzt durch

Quote:
if(REST < 0)
clearInterval(COUNTDOWN);
},1000);

Soviel zur Beantwortung Deiner Frage. Jetzt kommen noch ein paar
Anmerkungen zum Code-Stil:

Quote:
script language="Javascript"
Ersetze das durch <script type="text/css"> Das Attribute language ist seit
langem deprecated und wird nicht mehr benötigt.

Quote:
!--
Lass den Kommentar weg. Er war nötig in Netscape 2, damit Browser, die das
Script-Tag nicht kennen, das Skript nicht als Text darstellen.
Mittlerweile kennen alle Browser das Script-Tag.

Quote:
var REST = 100000;
Es ist Konvention, Konstanten in Großbuchstaben zu schreiben. Das hier
(und weiter unten) sind aber Variablen. Damit verwirrst Du andere
Entwickler möglicherweise.

Quote:
var COUNTDOWNTEXT_TAG = "";
var COUNTDOWNTEXT_STUNDE = "";
var COUNTDOWNTEXT_MINUTE = "";
var COUNTDOWNTEXT_SEKUNDE = "";

var COUNTDOWN = setInterval(function(){

if(REST >= 86400)
{
var TAGE = Math.floor(REST / 86400);
REST = REST - (TAGE * 86400);

if(TAGE > 1 || TAGE == 0)
TAGE ist eine Zahl, also kannst Du sie direkt mit 0 vergleichen, ohne eine
Typkonvertierung zuzulassen. Was ich meine ist: ersetze die zweite
Bedingung durch TAGE === 0, auch in den anderen Vergleichen weiter unten.

Quote:
{
COUNTDOWNTEXT_TAG = TAGE + " Tage ";
}
else if(Jahre == 1)
Wo ist Jahre definiert? Ich nehme an, Du hast vergessen, das Skript an
dieser Stelle anzupassen.

Quote:
{
COUNTDOWNTEXT_TAG = TAGE + " Tag ";
}
}


if(REST >= 3600)
{
var STUNDEN = Math.floor(REST / 3600);
REST = REST - (STUNDEN * 3600);

if(STUNDEN > 1 || STUNDEN == 0)
{
COUNTDOWNTEXT_STUNDE = STUNDEN + " Stunden ";
}
else if(Jahre == 1)
Auch hier.

Quote:
{
COUNTDOWNTEXT_STUNDE = STUNDEN + " Stunde ";
}
}


if(REST >= 60)
{
var MINUTEN = Math.floor(REST / 60);
REST = REST - (MINUTEN * 60);

if(MINUTEN > 1 || MINUTEN == 0)
{
COUNTDOWNTEXT_MINUTE = MINUTEN + " Minuten ";
}
else if(Jahre == 1)
Und hier.

Quote:
{
COUNTDOWNTEXT_MINUTE = MINUTEN + " Minuten ";
}
}

if(REST > 1 || REST == 0)
{
COUNTDOWNTEXT_SEKUNDE = REST + " Sekunden ";
}
else if(REST==1)
{
COUNTDOWNTEXT_SEKUNDE = REST + " Sekunde ";
}

document.getElementById("COUNTDOWN").innerHTML = COUNTDOWNTEXT_TAG +
COUNTDOWNTEXT_STUNDE + COUNTDOWNTEXT_MINUTE + COUNTDOWNTEXT_SEKUNDE;
Wenn das Laden Deiner Seite länger als eine Sekunde von hieran dauert,
kommt es hier zu einem Fehler, wenn das Element mit der ID COUNTDOWN noch
nicht existiert. Eine Lösung wäre, die anonyme Funktion aus dem
setInterval herauszuholen

var displayRemainingTime = function () {
// ...
};

und dann über

<body onload="var COUNTDOWN = window.setInterval(displayRemainingTime,
1000);">

zu starten.

Quote:
REST -= 1;
if(REST==0)
clearInterval(COUNTDOWN);
},1000);
//--
Ende des Kommentars natürlich auch entfernen

Quote:
/script
Gruß,
Matthias

Reply With Quote
  #4  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Countdown TAG, STUNDEN, MINUTEN und SEKUNDEN - 11-06-2009 , 08:11 AM



Matthias Reuter wrote:

Quote:
Stephan schrieb:
ich habe hier ein Script das mir die Sekunden zurückzählt, allerdings ist
irgendwann die Variable "REST" bei 0, und der Counter bleibt stehen..
;-)

Hier fehlt noch die Information, dass die Anzeige bei "1 Sekunde" stehen
bleibt. Sonst wäre ja alles wie gewünscht.
ACK

Quote:
Problem ist eigentlich erkannt, nur wie sol ich das Problem beheben?
[Zitat repariert]

Quote:
Indem Du

if(REST==0)
clearInterval(COUNTDOWN);
},1000);

ersetzt durch

if(REST < 0)
clearInterval(COUNTDOWN);
},1000);
(Bitte keine Zitatzeichen für eigenen [neuen] Quelltext verwenden. Das ist
sonst sehr verwirrend!)

Noch einfacher (und vermutlich effizienter): Die Dekrementoperation nach der
Fallunterscheidung ausführen (hier schon richtig™ geschrieben):

if (rest === 0) window.clearInterval(countdown);
rest--;

Quote:
script language="Javascript"

Ersetze das durch <script type="text/css"
^^^
Das denke ich nicht, Tim ;-)

Korrekt und bisher von allen möglichen MIME-Medientypen am besten
unterstützt ist `text/javascript'.

Quote:
!--

Lass den Kommentar weg. Er war nötig in Netscape 2, damit Browser, die das
Script-Tag nicht kennen, das Skript nicht als Text darstellen.
An dieser Stelle war der *Pseudo*-Kommentar noch nie unbedingt nötig.
Ausserdem mag ich bedreifeln, dass Netscape 2 das benötigte, denn JavaScript
1.0 wurde mit Netscape Navigator 2.0 eingeführt. Wir haben das hier
übrigens schon zur Genüge durchgekaut.

Quote:
document.getElementById("COUNTDOWN").innerHTML = COUNTDOWNTEXT_TAG +
COUNTDOWNTEXT_STUNDE + COUNTDOWNTEXT_MINUTE + COUNTDOWNTEXT_SEKUNDE;

Wenn das Laden Deiner Seite länger als eine Sekunde von hieran dauert,
kommt es hier zu einem Fehler, wenn das Element mit der ID COUNTDOWN noch
nicht existiert.
Das ist so nicht richtig. Aus dem OP geht nicht hervor, wo sich das SCRIPT-
Element befindet. Obige Vorgehensweise führt definitiv zu Problemen, wenn
das SCRIPT-Element sich im HEAD-Element befindet; sie führt nicht definitiv
zu Problemen, ist aber weiterhin fehlerträchtig, wenn sich das SCRIPT-
Element am Ende des BODY-Elements befindet. Daher:

Quote:
Eine Lösung wäre, die anonyme Funktion aus dem
setInterval herauszuholen

var displayRemainingTime = function () {
// ...
};

und dann über

body onload="var COUNTDOWN = window.setInterval(displayRemainingTime,
1000);"

zu starten.
ACK

Quote:
[...]
//--

Ende des Kommentars natürlich auch entfernen
s/Kommentars/Pseudo-$&/

Wollen wir nicht doch lieber in *de*.comp.lang.javascript weiterdiskutieren?
Ich setz' mal ein passendes F'up2. Die Newsserver der bisherigen
Diskutanden führen jene Gruppe.


PointedEars
--
Use any version of Microsoft Frontpage to create your site.
(This won't prevent people from viewing your source, but no one
will want to steal it.)
-- from <http://www.vortex-webdesign.com/help/hidesource.htm> (404-comp.)

Reply With Quote
  #5  
Old   
Stephan
 
Posts: n/a

Default Re: Countdown TAG, STUNDEN, MINUTEN und SEKUNDEN - 11-06-2009 , 04:49 PM



"Matthias Reuter" <frontendguru (AT) web (DOT) de> schrieb im Newsbeitrag
newsp.u2y3ukvqzxx26y (AT) hp5vj2j (DOT) webde.local...
Quote:
Problem ist eigentlich erkannt, nur wie sol ich das Problem beheben?

Indem Du

if(REST==0)
clearInterval(COUNTDOWN);
},1000);

ersetzt durch

if(REST < 0)
clearInterval(COUNTDOWN);
},1000);


Soviel zur Beantwortung Deiner Frage. Jetzt kommen noch ein paar
Anmerkungen zum Code-Stil:

Besten Dank für die Vielen tipps, allerdings bleibt die Sekunde nun bei 0
Stehen, anstelle das er eine Minute abzieht, und die Sekunden wieder bei 59
anfängt.
Also scheint das problem noch anderstwo zu stecken.


würde mich freuen wenn jemand dem Problem auf die schliche kommen könnte.

Lg
Stephan

Reply With Quote
  #6  
Old   
Dr J R Stockton
 
Posts: n/a

Default Re: Countdown TAG, STUNDEN, MINUTEN und SEKUNDEN - 11-07-2009 , 12:26 PM



In comp.lang.javascript message <4af3d9d2$1_2 (AT) news (DOT) tiscalinet.ch>, Fri,
6 Nov 2009 09:09:40, Stephan <xlarge (AT) vtxmail (DOT) ch> posted:

Your question will be, on average, more easily read in
de.comp.lang.javascript; so, while there can be no reasonable objection
to posting here in German, why not cross-post there so that they also
may benefit? Granted, the Swiss are better-mannered.

Ihre Frage wird sein, im Durchschnitt mehr leicht lesbar in
de.comp.lang.javascript, so, und es kann keine vernünftigen Einwände
zur Entsendung hier in Deutsch, warum nicht über-post es so, dass sie
auch profitieren können? Zugegeben, die Schweizer bessere Manieren.


For efficient countdown code, see
<URL:http://www.merlyn.demon.co.uk/js-date2.htm#ECD>; go via
<URL:http://www.merlyn.demon.co.uk/index.htm> to get it in
"translation".

Für eine effiziente Countdown-Codes finden Sie unter
<URL:http://www.merlyn.demon.co.uk/js-date2.htm#ECD>, Gehe über
<URL:http://www.merlyn.demon.co.uk/index.htm>, Um es in
"Übersetzung".


Quote:
if(TAGE > 1 || TAGE == 0)
{
COUNTDOWNTEXT_TAG = TAGE + " Tage ";
}
else if(Jahre == 1)
********************** warum Jahre ?????????
{
COUNTDOWNTEXT_TAG = TAGE + " Tag ";
}
}

Quote:
COUNTDOWNTEXT_STUNDE = STUNDEN + " Stunden ";
}
else if(Jahre == 1)
********************** Jahre ?????????
{
COUNTDOWNTEXT_STUNDE = STUNDEN + " Stunde ";
}
}

Quote:
COUNTDOWNTEXT_MINUTE = MINUTEN + " Minuten ";
}
else if(Jahre == 1)
********************** Jahre ?????????



<g> Easier in a language with regular plurals
Einfachere in einer Sprache mit regelmäßigen Plural </g>


--
(c) John Stockton, nr London, UK. ?@merlyn.demon.co.uk Turnpike v6.05.
Web <URL:http://www.merlyn.demon.co.uk/> - w. FAQish topics, links, acronyms
PAS EXE etc : <URL:http://www.merlyn.demon.co.uk/programs/> - see 00index.htm
Dates - miscdate.htm estrdate.htm js-dates.htm pas-time.htm critdate.htm etc.

Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.