Ergebnis 1 bis 4 von 4
  1. #1
    Anfänger
    Registriert seit
    04.11.2008
    Beiträge
    11

    Standard JS Funktion in PHP while-Schleife

    Ich habe hier eine PHP Funktion, der man Sekunden übergeben kann, und die Funktion macht dann einen Countdown daraus. Ich programmiere selbst nur PHP, und darum kann ich mir selbst nicht mehr weiterhelfen. Hab die Funktion von nem Kumpel, der weiss aber auch nicht weiter.
    Funktion:
    HTML-Code:
    <script language="JavaScript">
     function countdown(sekunden,divid){
     s=sekunden;
     h=Math.floor(s/3600); s-=h*3600;
     m=Math.floor(s/60); s-=m*60;
     h=h<10?'0'+h:h; m=m<10?'0'+m:m; s=s<10?'0'+s:s;
     document.getElementById(divid).innerHTML=h+':'+m+':'+s; sekunden--;
     if(sekunden>=0){ setTimeout('countdown(s,divid)',1000); }else{document.getElementById(divid).innerHTML= 'Abgelaufen';}
     }
    </script>
    Dann in der PHP while-Schleife hab ich das:
    HTML-Code:
    <script type="text/javascript">
                    countdown('<?=$verbleibende_zeit?>','oase_<?=$id?>');
    </script>
    In der gleichen while-Schleife wird auch noch immer ein passender div-container erzeugt:
    HTML-Code:
    <div id="oase_<?=$id?>" align="center"></div>
    Der Countdown wird nicht angezeigt, und in der Fehlerkonsole bekomm ich für jeden while-Durchlauf folgende Meldung:
    Code:
    Fehler: document.getElementById(divid) is null
    Quelldatei: http://kolotool.salzfisch.ch/in/index.php?s=*****
    Zeile: 62
    Nach 2 Stunden suchen und probieren hoffe ich, dass mir hier geholfen wird

  2. #2
    DateMake Dialer
    Registriert seit
    12.08.2007
    Beiträge
    100

    Standard

    Ich Vermute, dass deine Reihenfolge nicht stimmt. Vermutlich rufst du erst die JS-Funktion auf und erstellst dann erst die DIV-Container.

  3. #3
    Stanley Jobson Avatar von GregorSamsa
    Registriert seit
    23.08.2008
    Beiträge
    729

    Standard

    Könnte ne Race-Condition zustande kommen.

    Wird erst das Script gestartet, oder erst der DIV-Container geschrieben?

    Wichtig ist, dass erst ein DIV-Container im Quelltext steht, und danach das JS gestartet wird.

    Also z.B. so:
    PHP-Code:
    <script language="JavaScript">
     function countdown(sekunden,divid){
     s=sekunden;
     h=Math.floor(s/3600); s-=h*3600;
     m=Math.floor(s/60); s-=m*60;
     h=h<10?'0'+h:h; m=m<10?'0'+m:m; s=s<10?'0'+s:s;
     document.getElementById(divid).innerHTML=h+':'+m+':'+s; sekunden--;
     if(sekunden>=0){ setTimeout('countdown(s,divid)',1000); }else{document.getElementById(divid).innerHTML= 'Abgelaufen';}
     }
    </script>

    <div id="oase_<?=$id?>" align="center"></div> 

    <script type="text/javascript">
                    countdown('<?=$verbleibende_zeit?>','oase_<?=$id?>');
    </script>

  4. #4
    Anfänger
    Registriert seit
    04.11.2008
    Beiträge
    11

    Standard

    Habs jetzt hingekriegt. Es hat bei
    Code:
    setTimeout('countdown(s,divid)'
    das "s" und "divid" nicht als Variabel erkannt. Musste sie einfach mit "'" und "+" abtrennen

    Kann geschlossen werden

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •