Autor Zpráva
Baly
Profil *
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.
ještě před deklaraci funkce pises.

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
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í."

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: