Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Variabile che cambia valore dopo tot secondi

    Buongiorno,

    Sono molto inesperto in javascript.. anzi non ne so quasi niente ma sono obbligato ad utilizzarlo per fare una cosa per un cliente.

    allora.. il problema è questo..:

    data una array tipo 25,30

    come faccio a nominare la variabile 'id_pr' e darle prima il valore 25, poi.. dopo 5 secondi il valore 30, poi dopo altri 5 secondi torni a 25 e cosi via..

    Grazie mille a chi vorrà aiutarmi

    Rik
    Internet solutions

  2. #2
    Utente bannato
    Registrato dal
    Dec 2008
    Messaggi
    78
    Cominciamo con questo; gli articoli nell' Array possono avere o meno le virgolette: trattandosi di numeri, posso essere considerati sia come string che come integer.
    In var id_pr = level[1]; 0 o 1 per decidere quale dei due deve essere il valore di default di var id_pr; all' avvio della funzione assumerà l'altro.

    La function flipflop() puoi anche richiamarla subito al caricamento pagina, inserendo nel Tag BODY:
    <body bgcolor="silver" onload='flipflop();'>

    Ora con setTimeout a 2000 alterna ogni 2 secondi.
    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>flip-flop function</title>
    
    <script type="text/javascript">
    
     var level = new Array(25, 30);
     
     var id_pr = level[1];
    
    function flipflop(){
    
       if (id_pr == level[1]){
            id_pr = level[0]
       } else { 
            id_pr = level[1]
       }
    
     T5 = setTimeout('flipflop()', 2000);
    
     document.getElementById("display").value  = id_pr;
    
     }
    
    </script>
    
    </head>
    <body bgcolor="silver">
    
    <div align="center">
                
    
    
    
    var id_pr = <input id="display" type="text" size="4">
    
                <input value="avvia"   type="button" onclick='flipflop();'>
    
                <input value="arresta" type="button" onclick='clearTimeout(T5);'>
     
    </div>
    </body>
    </html>

  3. #3
    Utente bannato
    Registrato dal
    Dec 2008
    Messaggi
    78
    Oppure anche così, col "rimpallo" tra due funzioni; ora però, al click su "avvia" assumerà sempre un determinato Valore di partenza.

    Nota in entrambe, che attivare compulsivamente un Timer JS (col tasto "avvia"), mentre cioè la sua temporizzazione non si è ancora esaurita spontaneamente, lo porta a dei ritmi sballati.
    Questo vale sia per setTimeout che per setInterval.

    Ho introdotto una variable per settare la cadenza.
    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>flip-flop twin functions</title>
    
    <script type="text/javascript">
    
     var level = new Array(25, 30);
     
     var id_pr = level[0];
    
     var tick  = 2000;
    
    
    function flipflopOne(){
    
     id_pr = level[0];
    
     T5 = setTimeout('flipflopTwo()', tick);
    
     document.getElementById("display").value  = id_pr;
    
     }
    
    function flipflopTwo(){
    
     id_pr = level[1];
    
     T5 = setTimeout('flipflopOne()', tick);
    
     document.getElementById("display").value  = id_pr;
    
     }
    
    </script>
     
    </head>
    <body bgcolor="silver" onload='flipflopOne();'>
    
    <div align="center">
                
    
    
    
    var id_pr = <input id="display" type="text" size="4">
    
                <input value="avvia"   type="button" onclick='flipflopOne();'>
    
                <input value="arresta" type="button" onclick='clearTimeout(T5);'>
     
    </div>
    </body>
    </html>

  4. #4
    Utente bannato
    Registrato dal
    Dec 2008
    Messaggi
    78

    setInterval & setTimeout combo

    Se non serve per altro, questo è ancora più basilare ed appropriato.
    Un setInterval che ogni 10 sec. riporta id_pr al valore di level[0] nel contempo innescando un setTimeout che interverrà dopo 5 sec. assegnando a id_pr il valore di level[1]; setTimeout interviene e si estingue, setInterval invece ripete indefinitivamente re-innescando anche setTimeout.

    Lascia una gap iniziale di 15 sec. però; che volendo si può eliminare aggiungendo

    setTimeout('id_pr=level[1];', 5000);

    su una riga a se' stante e che interverrà inizialment, una sola volta.


    Si devono usare apici " ed apostrofi ' alternativamente, o l' escape character \ in quanto altrimenti interferiscono e bloccano lo script.

    codice:
    <script type="text/javascript">
    
     var level = new Array(25, 30);
     
     var id_pr = level[0];
    
     setInterval('id_pr=level[0]; setTimeout("id_pr=level[1];", 5000);', 10000);
    
    </script>
    Per mostrarne il funzionamento possiamo avvalerci delle finestrelle di alert; fai attenzione a non scendere a tempi troppo rapidi che ti impedirebbero di reagire agli alert pop-up che si aprono in successione.
    codice:
    <html>
    <head>
    
    <script type="text/javascript">
    
     var level = new Array(25, 30);
     
     var id_pr = level[0];
    
     setInterval('id_pr=level[0]; setTimeout(\'id_pr=level[1]; alert(id_pr);\', 3000); alert(id_pr);', 6000);
    
    </script>
    
    </head>
    <body bgcolor="silver">
    
    </body>
    </html>

  5. #5
    ok.. grazie mille davvero.. il problema è che l'array ora è di due valori ma potrebbe assumere lunghezza di 3 - 4 - 10 valori.. in pratica avrei bisogno che l'array scorra e arrivata alla fine ricominci.. puoi aiutarmi anche in questo?

    Grazie
    Internet solutions

  6. #6
    inoltre vorrei non visualizzare a video il valore ma dovrebbe essere inserito nell'attributo action di un tag form...

    Dai poi non rompo più
    Internet solutions

  7. #7
    Utente bannato
    Registrato dal
    Dec 2008
    Messaggi
    78
    Lo supponevo ...

    Facciamo uso di una terza variabile which;
    dell' if (){} statement per riportare which a zero;
    e ci avvaliamo di level.length che ritorna di quanti articoli items è composto l' Array denominato level (altrimenti dovremmo inserire un numero e tenerlo aggiornato manualmente qualora variassimo la lunghezza dell' Array).

    Dopo rimuovi i (4) alert(id_pr); senza mangiarti virgole, apostrofi o \ backslash .

    codice:
    <html>
    <head>
    
    <script type="text/javascript">
    
     var level = new Array(25, 30, 35, 40, 45, 50);
     
     var which = 0;
     var id_pr = level[which];
    
     alert(id_pr);
    
     setTimeout('which++; if(which==level.length){which=0}; id_pr=level[which]; alert(id_pr);', 5000);
    
     setInterval('which++; if(which==level.length){which=0}; id_pr=level[which]; '
                 +'setTimeout(\'which++; if(which==level.length){which=0}; id_pr=level[which]; alert(id_pr);\', '
                 +'5000); alert(id_pr);', 10000);
    
    </script>
    
    </head>
    <body bgcolor="silver">
       
    </body>
    </html>

  8. #8
    in totale per mettere il risultato di questa bella cosa come valore dell'action di una form ?

    scusa ma sono proprio alle primissime armi...
    Internet solutions

  9. #9
    Utente bannato
    Registrato dal
    Dec 2008
    Messaggi
    78
    Originariamente inviato da EasyWebItalia
    .. il valore .. dovrebbe essere inserito nell'attributo action di un tag form...
    Una stringa di esecuzione del tipo:

    document.getElementById("id_form").action = "recapito"+id_pr+"_url";

    o

    document.forms[0].action = "recapito"+id_pr+"_url"; &#160; &#160; (da testare)

    arrivano alla conclusione che vuoi, ma non possono essere inserite così, "nude e crude" nello SCRIPT appena postato, perché a questo si da' esecuzione nel corso stesso del caricamento codice sul Browser, quando però i sottostanti Elementi che compongono il BODY non sono ancora stati caricati.
    Vanno attivate tramite un gestore d' evento come gli onload od onclick degli esempi precedenti; che essi richiamino o meno ad una funzione, l' importante è che la stringa JS non vada alla ricerca di un FORM che non esiste ancora agli effetti HTML.

    Originariamente inviato da EasyWebItalia
    in totale per mettere il risultato di questa bella cosa come valore dell'action di una form ?
    ... mi occorrerebbe sapere se il FORM ha un NOME o ID e qual è;
    il contenuto dell' ACTION e in cosa lo dovresti modificare/sostituire intervenendo con quella variabile;
    e quando questo dovrebbe avvenire; OnSubmit ? Fai l' invio tramite un pulsante INPUT TYPE="Submit" oppure ONSUBMIT="" nel Tag FORM che chiama una function ?

    Questo potrebbe già bastare ma potrebbe anche essere insufficente:

    &#60;input value="submit" onclick='document.getElementById("main").action="r ecapito"+id_pr+"_url";' type="submit"&#62;

    bisogna accertarsi che la modificazione del Valore di ACTION avvenga *prima* della submission; e per questo mi affiderei ad una funzione convertendo il pulsante da type="submit" in un comune type="button" che chiama quella function onclick="somefun();" dove metti la stringa per l' action e *dopo* document.getElementById("main").submit();

    Ora però chiudo ...

  10. #10
    Utente bannato
    Registrato dal
    Dec 2008
    Messaggi
    78

    errata corrige

    ATTENZIONE !
    Il sistema del Forum si è mangiato l' escape character nei due SCRIPT precedenti: setTimeout dentro setInterval, qui dove ora impiego gli apici:
    codice:
     setInterval('which++; if(which==level.length){which=0}; id_pr=level[which]; '
                 +'setTimeout("which++; if(which==level.length){which=0}; id_pr=level[which]; alert(id_pr);", '
                 +'5000); alert(id_pr);', 10000);
    prima c' era \\' che pure va bene.
    Va messo doppio \\ escape character quando si posta il Code:
    codice:
    setInterval('id_pr=level[0]; setTimeout(\\'id_pr=level[1]; alert(id_pr);\\', 3000); alert(id_pr);', 6000);

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.