Visualizzazione risultati 1 fino 7 di 7

Discussione: Bloccare setTimeout

  1. #1
    Guest

    Unhappy Bloccare setTimeout

    salve a tutti , vorrei porvi un quesito ,

    ho una funzione in javascript che mi fa un setTimeout ogni 10 secondi , ora vorrei pero bloccarla in un qualsiasi momento , con un click , come faccio?

    cosa devo associare alla funzione all'evento click?

    per maggiori info questa è la funzione che riaggiorna:

    Codice PHP:
    function hello ()
    {
    var
    req = new XMLHttpRequest ();
    req.onreadystatechange = function () {
    if (
    req.readyState == 4 && req.status == 200)
    document.getElementById('hello').innerHTML = req.responseText;
    };

    var
    ts = Math.round( new Date().getTime() / 1000 );
    req.open ('GET', 'leggi0.php?name=1&timestamp=' + ts, true);
    req.send (null);
    setTimeout('hello()',5000);
    }


    function
    AggiornaAJAX()
    {
    setTimeout('hello()',5000); //tempo di passaggio tra il testo iniziale del div e quello del file da importare aggiornato
    }

  2. #2
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Devi salvare il valore restituito da setTimeout in una variabile (sì, setTimeout ritorna un valore, anche se spesso è chiamato come metodo "void").

    Per annullare il timeout, devi usare la funzione clearTimeout(timeout), dove il parametro timeout è la variabile di cui sopra...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  3. #3
    Guest

    Predefinito

    Non succede niente, probabilmente un errore di logica questa e la funzione

    Codice PHP:
    function hello ()
    {
    var
    req = new XMLHttpRequest ();
    req.onreadystatechange = function () {
    if (
    req.readyState == 4 && req.status == 200)
    document.getElementById('hello').innerHTML = req.responseText;
    };

    var
    ts = Math.round( new Date().getTime() / 1000 );
    req.open ('GET', 'leggi0.php?name=1&timestamp=' + ts, true);
    req.send (null);
    setTimeout('hello()',5000);
    }


    function
    AggiornaAJAX()
    {
    setTimeout('hello()',5000); //tempo di passaggio tra il testo iniziale del div e quello del file da importare aggiornato
    }


    function
    hideshow(div) {

    var
    element = document.getElementById(div);
    if (
    element.style.visibility == 'hidden') {
    element.style.visibility = 'visible';
    element.style.display = 'block';
    clearTimeout(timer);



    } else {
    element.style.visibility = 'hidden';
    element.style.display = 'none';
    timer = setTimeout("hideshow(div)",5000);


    }

    }
    che richiamo così:

    Codice HTML:
    <a href="javascript:void(null);" onClick="javascript:hideshow('content<?php echo $var ?>')">Link</a><br><br>
    ma mi da errore quando clicco su hideshow.

    Sapreste dirmi il xkè?

  4. #4
    L'avatar di mycarlo
    mycarlo non è connesso Utente attivo
    Data registrazione
    06-10-2009
    Residenza
    $this->s50
    Messaggi
    467

    Predefinito

    clearTimeout richiede come parametro l'id del timer, l'id lo ottieni richiamando setTimeout, che restituisce l'id se richiamata correttamente, quindi puoi salve l'id che restituisce in una variabile.

    Io ti consiglio di modificare il codice che hai postato sopra così:
    Codice:
    var timer; // definisco la variabile timer
    
    function hello ()
    {
       var req = new XMLHttpRequest ();
       req.onreadystatechange = function () {
          if (req.readyState == 4 && req.status == 200)
             document.getElementById('hello').innerHTML = req.responseText;
       };
    
    var ts = Math.round( new Date().getTime() / 1000 );
    req.open ('GET', 'leggi0.php?name=1&timestamp=' + ts, true);
       req.send (null);
       timer = setTimeout('hello()',5000);
    }
    
    
    function AggiornaAJAX()
    {
    timer = setTimeout('hello()',5000); //tempo di passaggio tra il testo iniziale del div e quello del file da importare aggiornato 
    }
    
    
    function hideshow(div) {
        
        var element = document.getElementById(div);
        if (element.style.visibility == 'hidden') {
            element.style.visibility = 'visible';
            element.style.display = 'block';
    clearTimeout(timer);
    
    
    
        } else {
            element.style.visibility = 'hidden';
            element.style.display = 'none';
    timer = setTimeout("hideshow(div)",5000); 
    
    
        }
        
    }
    L'unico errore che hai commesso è che non hai salvato l'id ogni volta che richiamavi setTimeout

  5. #5
    Guest

    Predefinito

    non funziona
    come errore mi da
    'div' non è definito
    perchè?

  6. #6
    L'avatar di mycarlo
    mycarlo non è connesso Utente attivo
    Data registrazione
    06-10-2009
    Residenza
    $this->s50
    Messaggi
    467

    Predefinito

    Sostituisci:
    Codice:
    timer = setTimeout("hideshow(div)",5000);
    Con:
    Codice:
    timer = setTimeout("hideshow('" + div + "')",5000);

  7. #7
    Guest

    Predefinito

    non funziona , non blocca lo script

    Codice PHP:
    var timer; // definisco la variabile timer

    function hello ()
    {
    var
    req = new XMLHttpRequest ();
    req.onreadystatechange = function () {
    if (
    req.readyState == 4 && req.status == 200)
    document.getElementById('hello').innerHTML = req.responseText;
    };

    var
    ts = Math.round( new Date().getTime() / 1000 );
    req.open ('GET', 'leggi0.php?name=1&timestamp=' + ts, true);
    req.send (null);
    timer = setTimeout('hello()',5000);
    }


    function
    AggiornaAJAX()
    {
    timer = setTimeout('hello()',5000); //tempo di passaggio tra il testo iniziale del div e quello del file da importare aggiornato
    }


    function
    hideshow(div) {

    var
    element = document.getElementById(div);
    if (
    element.style.visibility == 'hidden') {
    element.style.visibility = 'visible';
    element.style.display = 'block';
    clearTimeout(timer);



    } else {
    element.style.visibility = 'hidden';
    element.style.display = 'none';
    timer = setTimeout("hideshow('" + div + "')",5000);

    }

    }
    ------------------------------

    ho risolto il tutto bastava togliere da submit la funzione hello() e lasciare solo AggiornaAJAX(). grazie ancora per l'aiuto :)
    Ultima modifica di provaxyw : 13-02-2010 alle ore 16.50.53 Motivo: risolto

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •