-
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×tamp=' + 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
}
-
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...
-
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×tamp=' + 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è?
-
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×tamp=' + 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
-
non funziona
come errore mi da
'div' non è definito
perchè?
-
Sostituisci:
Codice:
timer = setTimeout("hideshow(div)",5000);
Con:
Codice:
timer = setTimeout("hideshow('" + div + "')",5000);
-
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×tamp=' + 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 :)