Autor | Zpráva | ||
---|---|---|---|
Baly Profil * |
#1 · Zasláno: 19. 10. 2009, 22:20:18
Zdravím, mám následující kód:
function pises(jmeno) { if (jmeno.style.background != "black") { jmeno.style.background = "black"; } if (jmeno.style.color != "white") { jmeno.style.color = "white"; } if (psani.style.visibility == "hidden") { psani.style.visibility = 'visible'; } clearTimeout(nepises); var nepises = setTimeout("psani.style.visibility = 'hidden'", 2000); } <textarea name="textarea" colls="10" rows="10" style="" onkeypress="pises(this);"></textarea> <span id="psani" style="visibility: hidden">píšeš...</span> udělal jsem textové pole ve kterém když se píše, změní se barva písma, pozadí a vedle textového pole se ukáže text "píšeš...". Funguje to dobře, až na to že někdy timeout nečeká a prostě jen objekt skryje. Takže to tak podivně občas poblikává, no více než občas, hodně často. Nevíte v čem může být problém? |
||
stilett Profil * |
Nejsem si jistý, ale můj osobní tip je, že to je špatným rozsahem platnosti proměnné nepises. Funkce clearTimeout používá globální proměnnou a setTimeout ukládá návratovou hodnotu do lokální. Takže clearTimeout potom časovač nezruší.
Pro opravu: odstranit var na 12. řádku a případně napsat var nepises. Moderátor Chamurappi: Omlouvám se za technickou závadu fóra. Zkusil jsem doplnit vyhvězdičkovaná slova (napsal jsem je kurzívou), snad jsem se trefil.
|
||
_es Profil |
#3 · Zasláno: 20. 10. 2009, 09:19:11
Baly,
stilett má pravdu, nepises je lokálna premenná funkcie a teda 11 riadok má rovnaký efekt ako clearTimeout(undefined); „někdy timeout nečeká“ Ten čaká, len nenastáva jeho zrušenie v 11 riadku. Funguje ti kód vo všetkých prehliadačoch, aj v tých, kde nie je automaticky vytvorená premenná psani? |
||
stilett Profil * |
Děkuji Chamurappimu za doplnění odfiltrovaných slov, doplnil to správně, jenom jedna věta měla znít: "... a setTimeout ukládá návratovou hodnotu do lokální."
|
||
Časová prodleva: 14 let
|
0