Visualizzazione dei risultati da 1 a 6 su 6

Discussione: variabile indefinita

  1. #1

    variabile indefinita

    salve, devo fare un countdown da inserire in una pagina usando però come riferimenti l'ora del server, mi avevano consigliato di farlo in jsp ma io nn lo so usare

    mi sono ingegnato e ho fatto un mix di php e javascript

    (ke nn conosco neanke troppo)

    solo ke nn funziona :rollo:

    l'errore sta nel javascript (almeno penso ), praticamente la prima volta ke kiamo la funzione passa il valore ke mi serve (e funge tutto) mentre alla rikiamata interna fa cilekka

    la console javascript di firefox mi dice "Errore: countdowntime is not defined" in questa riga "setTimeout("countdown(countdowntime)",1000); //ricaricamento script dopo 1 secondo"

    questo è il codice

    Codice PHP:
    <html>
    <head>
    <title>countdown</title>

    <?
    /* questo file imposta l'ora finale e quella attuale e visualizza il countdown */

    // ora finale in formato timestamp (sarà letta da una query)

    $endtime mktime(11,20,0,9,27,2006); //11:20:00 27/9/2006

    //echo "endtime : "; //controllo
    //echo $endtime; //controllo
    //echo "endtime in normalformat : "; //controllo
    //echo date('d m Y H:i:s',$endtime); //controllo  

    // ora attuale in formato timestamp

    $nowtime time();

    //echo " nowtime : "; //controllo
    //echo $nowtime; //controllo
    //echo "nowtime in normalformat : "; //controllo
    //echo date('d m Y H:i:s',$nowtime); //controllo  

    // tempo rimanente

    $countdowntime $endtime $nowtime;

    //echo " tempo mancante : ";
    //echo $countdowntime;



    //$hours = round(($countdowntime/(60*60)),0);
    //$minutes = round((($countdowntime%(60*60))/60),0);
    //$seconds = round((($countdowntime%(60*60))%60),0);

    //echo "tempo mancante normalformat : $hours : $minutes : $seconds";

    ?>

    <script language="javascript1.2">

    function countdown(countdowntime)
    {
        //document.write("dentroscript");//controllo
        //document.write(countdowntime);//controllo        

        if (countdowntime >= 0)

        {
            //document.write("dentroif");//controllo

            hours = Math.floor(countdowntime/(60*60));//calcolo ore
            minutes = Math.floor((countdowntime%(60*60))/60);//calcolo minuti
            seconds = Math.floor((countdowntime%(60*60))%60);//calcolo secondi

            countdowntime = countdowntime - 1;//decremento tempo
        
            var testo = hours + " : " + minutes +  " : " + seconds;//testo da visualizzare
        
            //document.write(testo);

            document.getElementById("a").innerHTML = testo;
        
            setTimeout("countdown(countdowntime)",1000); //ricaricamento script dopo 1 secondo

        }

        else

        {
            //document.write("dentroelse");

            var testo = "finito";

            document.getElementById("a").innerHTML = testo;
        }


    }
    </script>

    </head>

    <body onLoad="countdown(<? echo $countdowntime?>)">

    <div id="a">h:m:s</div>

    </body>
    </html>
    p.s.

    lo so ke è scritto con i piedi ma nn so fare di meglio

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    countdowntime non e' una variabile globale, e' l' argomento della funzione,
    anche se esistesse una var countdowntime fuori da funzione, l' argomento avrebbe il sopravvento

    o "scrivi" questo valore quando setti il timeout
    codice:
    setTimeout("countdown("+countdowntime+")",1000);
    oppure fai riferimento a variabile sicuramente globale
    codice:
    var ctime;
    function countdown(countdowntime){
    ...
    countdowntime -=1;//decremento tempo 
    ctime=countdowntime; // setto il valore della globale a countdowntime
    ...
    setTimeout("countdown(ctime)",1000); //ricaricamento script dopo 1 secondo
    // ctime, fuori da funzione (e lo e' perche' richiamata dopo un sec)
    // avra' ancora il valore atteso, countdowntime
    }
    spero di essere riuscito a spiegarmi
    ciao

  3. #3
    grazie mille, ora provo


  4. #4
    mitico !!

    il primo metodo funziona

    solo una curiosità, ke differenza c'è tra

    countdown(countdowntime)

    e

    countdown("+countdowntime+")


    nn l'ho mica capito

    cioè tu passi la scritta "countdowntime" ke poi lui legge come valore ??

    spiega spiega

    nn ci sarei mai arrivato


  5. #5
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    guarda, facilissimo

    setTimeout si aspetta come primo argomento un' istruzione da valutare (come se usassi l' eval), questo implica che al suo interno puoi concatenare

    dopo un secondo, la funzione in cui e' inserito il timeout e' stata eseguita ed e' finita, gli argomenti di quella funzione o le variabili locali non esistono piu'

    resta da valutare quella inserita nel timeout, immagina di richiamare
    countdown(countdowntime)
    cosa e' contdowntime? niente, perche' era un argomento della funzione ormai eseguita
    immagina di richiamare
    countdown(174567)
    cosi' ha senso

    quando scrivi
    setTimeout("countdown("+countdowntime+")",1000);

    fisicamente concateni nell' istruzione da valutare il valore che al momento ha la variabile (che in realta' e' un argomento)
    se potessi vedere il risultato della concatenazione sarebbe
    setTimeout("countdown(174567)",1000);

    esguita dopo un secondo ha ancora senso

  6. #6
    ora è tutto kiaro, questo è il primo script ke faccio, ho molto da imparare !


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.