Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    23

    setTimeout() e passaggio di parametri

    /* Ciao a tutti, qualcuno saprebbe dirmi come far funzionare questa funzione?
    * tutto quello che vorrei è che ripetesse l'esecuzione di una funzione, passata nel parametro
    * action, il numero di volte indicato da times, ogni interval millisecondi.
    * Purtroppo dopo la prima iterazione pare che perda i valori passati come prametro.
    * Grazie!
    */

    function cr_timeredActionLoop(action, times, interval){
    eval(action);
    if(action>0)
    setTimeout("cr_timeredActionLoop("+action+","+(tim es-1)+","+interval+")",interval);
    }

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Non se il caso tuo, ma forse devi usare setInterval che ripete l'operazione scadenzata all'infinito, mentre il setTimeout esegue l'operazione una sola volta allo scadere del tempo.


    P.S. Benvenuto sul forum.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    23

    ok ma..

    Si è vero setInterval mi risparmierebbe un parametro.
    La problematica è che comunque perderebbe il valore action, il mascheramento dei parametri in javascript è labile chissa' cosa si aspetta!!!

    PS:
    La funzione la chiamo così:

    <div id="test" onClick="cr_timeredActionLoop('alert(\'test\')', 5, 5000);">TEST</div>

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    :master: Non so, prova questo se può andare :master:

    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Pagina senza titolo</title>
    
    <script language="javascript" type="text/javascript">
    // <!CDATA[
    
    function lancia_metodo_timeout(stringa_funzione, times, interval, n)
    {
    	if(n == undefined) n = 1;
    	if(n > times) return;
    	
    	eval(stringa_funzione);
        n++; 
        window.setTimeout(function(){lancia_metodo_timeout(stringa_funzione, times, interval, n);}, interval);
    	
    }
    
    
    
    
    function Button1_onclick() 
    {
        self.adesso = (new Date()).getTime();
        
        var stringa_funzione = "v = new Date();document.getElementById('div1').innerHTML += '
    ' + n + ': ' + (v.getTime() - self.adesso)" ;
        lancia_metodo_timeout(stringa_funzione, 3, 3000);
    }
    
    // ]]>
    </script>
    
    </head>
    <body>
        <input id="Button1" type="button" value="lancia setTimeout" onclick="return Button1_onclick()" />
        <hr />
        <div id="div1"></div>
    </body>
    </html>
    Pietro

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    23

    epilogo

    Allora ho risolto così, mantenendo la struttura che mi ero prefissato:

    codice:
    function cr_timeredActionLoop(action, times, interval){
     eval(action);	
     if(times>0)
      setTimeout(function(){cr_timeredActionLoop(action, times-1, interval);},interval);
    }

    Grazie ai consigli letti come risposta ho usato la sintassi function(){}.
    Ora qualcuno mi spiega questa sorta di "funzione anonima"?
    A cosa corrisponde quella sintassi?

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 © 2026 vBulletin Solutions, Inc. All rights reserved.