Autor Zpráva
Aaron135
Profil
Ahojte, mám problém se funkcí js, která zajišťuje refresh div každých 1000ms. Když přepnu pomocí JS nové okno pořád mi tam skáče starý text.Zkoušel sem zastavit první realod pomocí return !false;, ale nepomohlo to. Jak mám funkci zrušit?
Kód:
<script type="javascript">
function refresh(url){
.........
Kod pro refresh.
....
}
</script>
<div id="reloaddiv"></div>
<a onclick="refresh("url1.php");">Okno s reloadem 1</a>
<a onclick="refresh("url2.php");">Okno s reloadem 2</a>
Jak mám zastavit první reload a nastavit druhý?
Předem dekuj za odpověd.
Joker
Profil
Aaron135:
Jak se nastavuje to spuštění každou sekundu?
Řešením by bylo použít setInterval, výsledný interval si uložit do proměnné a později ho zrušit.
Viz také časování.

Mimochodem, v tom příkladu jsou blbě uvozovky (je to vidět i na zvýrazňovačí).
Aaron135
Profil
Počkat možná bych tedy měl řešení!
Funkce vypadá takto:
<script>
function refresh(url){
var auto_refresh = setInterval(
 function ()
{
$('#reloaddiv').load(url).fadeIn("slow");
}, 1000);
}
</script>
Takže stačí napsat return !auto_refresh; ?
Joker
Profil
Aaron135:
Ne.
Cituji příklad ze stránky, na kterou jsem odkazoval v minulém příspěvku:
proměnná2 = setInterval("akce", milisekundy); // načasuje opakovanou akci 
 clearInterval(proměnná2); // zruší opakované načasování 
Aaron135
Profil
Zkusil sem před každým spuštěním nového intervalu smazat dosavadní tím, že jsem zadal:
window.clearInterval(autorefresh);
autorefresh=setInterval(...,1000);
Ale ten interval nejde znova nastavit. Prostě se úplně smaže.


Joker:
Ale pokud tento kód zadám tak ten interval proběhne jen jednou ne?
Aaron135
Profil
Ono to jako nejdřív asi 6x problikne a pak se tam realoaduje ten novej kód, ale stejně mi to tam zezačátku vadí.
Mimochodem když tam dám "clearInterval", tak už ten interval znova nejde nastavit :/.
_es
Profil
Aaron135:
před každým spuštěním nového intervalu
Ale pokud tento kód zadám tak ten interval proběhne jen jednou ne?
Akého „nového intervalu“ Ako „jednou“? Pozrel si si vôbec, ako funkcia setInterval funguje?
Bude spúšťať pravidelne opakovane v zvolenom časovom intervale nejakú funkciu, dokiaľ to pravidelné opakované spúšťanie nezastavíš funkciou clearInterval.
Aaron135
Profil
Ano, to jsem samozřejmě pochopil, že setInterval spouští akci v zadaném intervalu. Já potřebuju nastavený interval #1 zastavit a nastavit #2, ale když dám clearInterval, tak mi interval #2 nejde znovu nastavit.
Viz kód:
<script>
function nastav_interal(){
clearInterval(interval);
var interval=setInterval(akce(),1000);
}
function akce(){
....kod...
}
</script>
Pokud jsem napsal kód dobře tak by tom mělo zrušit dosavadně nastavený a nastavit nový. Tak proč to nefunguje?
Joker
Profil
Aaron135:
Sice tam chybí kód okolo, ale takhle to nejspíš nebude fungovat.
Předpokládám, že se volá nastav_interval(), pak se nějak pokračuje a někdy později se zavolá znovu. Pak nemůže ten interval být uložený v lokální proměnné té funkce.

Buď se musí použít globální proměnná, nebo se ten interval musí z funkce vrátit a pak zase předat jako parametr.
Aaron135
Profil
Hele kód okolo vypadá zhruba takto:
<script>
function nastav_interval(url){
clearInterval(interval); // Tady probíha rušení již zadaného intervalu
 var interval = setInterval(
  function(){
  $('#DIV').load(url).fadeIn("slow");
 }, 1000); // nastavení nového
}
</script>
<a onclick="nastav_interval('url1.php');">Okno s reloadem 1</a>
<a onclick="nastav_interval('url2.php');">Okno s reloadem 2</a>
Jak by tedy měl kód vypadat?
_es
Profil
Aaron135:
Viď radu Jokera ohľadom lokálnej/globálnej premennej, interval je lokálna premenná funkcie nastav_interval a po skončení funkcie zanikne. Globálnu premennú definuješ mimo tej funkcie.

setInterval(akce(),1000)
Správne je:
setInterval(akce,1000)
Viď Časté potíže, zajímavosti a poučné debaty » Rozdíl mezi voláním funkce a funkcí
Aaron135
Profil
Já potřebuju do té funkce s realoadem předat 2 proměnné jmeno1 a jmeno2
Tedy:
function autoRefresh(jmeno1,jmeno2){
 var ref = setInterval(
  function(){
  $('#chatRoom').load('chatproperty.php?j1='+jmeno1+'&j2='+jmeno2+"&refresh=auto").fadeIn("slow");
 }, 1000);
}
Jak mám tedy prosím zrušit první interval a nastavit druhý? :)
_es
Profil
Aaron135:
zrušit první interval
Ak si do nejakej premennej uložíš návratovú hodnotu funkcie setInterval, tak ho zrušíš funkciou clearInterval. V kóde v [#12] je ref lokálna premenná funkcie autoRefresh, ktorá po skončení funkcie zanikne. Ak chceš tú hodnotu uložiť, tak si ju ulož do takej premennej, ktorá po skončení funkcie nezanikne, viď túto radu.
Aaron135
Profil
Už to mám! Dostal sem se snad na místo kde končí internet, ale našel sem že stačilo odebrat v
var ref = setInterval(
  function(){
  $('#chatRoom').load('chatproperty.php?j1='+jmeno1+'&j2='+jmeno2+"&refresh=auto").fadeIn("slow");
 }, 1000);
slovo var a už to normálně funguje.
_es
Profil
Aaron135:
že stačilo odebrat v ... slovo var
Ešte lepšie by ho bolo len neodobrať, ale aj definovať premennú mimo funkcie, viď aj Časté potíže, zajímavosti a poučné debaty » Používejte var , ale to sa ti tu už píše 4. krát.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: