Autor Zpráva
quatzael
Profil
Mám ve scriptu něco takovýho:

(function(){var i = document.getElementById("element"), v = i.checked;
setInterval(function(){if(i.checked !== v){ v = i.checked; if(v) sessionStorage.element = "on"; else sessionStorage.element = "off";}}, 50)})();

Jenže tohle tam mám vícekrát pro více elementů. A v některých případech nebudu všechny ty elementy vypisovat, ale jen některý. Takže ten javascript bude házet chybu:
Nelze načíst vlastnost checked nedefinovaného nebo nulového odkazu

Vadí to moc? Nezastaví to celý script?

Musím to nějak dávat do podmínky? Třeba takhle:


if (document.getElementById("element"))
{
(function(){var i = document.getElementById("element"), v = i.checked;
setInterval(function(){if(i.checked !== v){ v = i.checked; if(v) sessionStorage.element = "on"; else sessionStorage.element = "off";}}, 50)})();
}

Je to tak ok?
Chamurappi
Profil
Reaguji na quatzaela:
Nezastaví to celý script?
Zastaví. A každých 50 milisekund ti to připíše do konzole chybu.

Musím to nějak dávat do podmínky? Třeba takhle
Proč tak složitě? Proč prostě dovnitř té funkce nedáš if(!i) return;?

Moc nerozumím, proč se má každých 50 milisekund zkoumat zaškrtnutí. Proč nestačí uložit stav při změně? Tedy při onclicku?
quatzael
Profil
Chamurappi:
Proč prostě dovnitř té funkce nedáš if(!i) return;?
Kam dovnitř? Hned na začátek?

Moc nerozumím, proč se má každých 50 milisekund zkoumat zaškrtnutí. Proč nestačí uložit stav při změně? Tedy při onclicku?
Normálně by asi stačilo i jen onchange. Mám tam ajax. Je tam tlačítko, aby se načetly původní hodnoty z profilu.
Nevím jestli by tady nestačilo to onchange. Ale jsou tam věci v tom formuláři, u kterých by to onchange určitě nestačilo.
Už si nějak nepamatuju, proč jsem dával ten setInterval na všechny položky formuláře..

Někde jsem to tady řešil, ale už to vlákno nemůžu najít..
Chamurappi
Profil
Reaguji na quatzaela:
Hned na začátek?
Tam, kde už je naplněná proměnná i, ale ještě se z ní nezkoušelo vytáhnout checked.

Normálně by asi stačilo i jen onchange.
Raději onclick, ten reaguje hned.

Mám tam ajax.
Nesouvisí.

Je tam tlačítko, aby se načetly původní hodnoty z profilu.
Tedy <input type="reset">? Nesouvisí.

jsou tam věci v tom formuláři, u kterých by to onchange určitě nestačilo
Pochybuji.
quatzael
Profil
Chamurappi:
Tam, kde už je naplněná proměnná i, ale ještě se z ní nezkoušelo vytáhnout checked.
Takže tady??:
(function(){var i = document.getElementById("element"), if(!i) return; v = i.checked; ...

„Mám tam ajax.“
Nesouvisí.
„Je tam tlačítko, aby se načetly původní hodnoty z profilu.“
Tedy <input type="reset">? Nesouvisí.

Žádný reset tam není, ale naopak dost sofistikovaný tlačítko, při kterým, když na něj uživatel klikne, se ajaxem spustí PHP script, který načte data z databáze podle aktuálního nastavení, které si uživatel zvolil, a javascript těmito daty potom vyplní formulář i s těmi animacemi fadeout u borderů inputů (který jsem už tady někde řešil) , aby bylo vidět který inputy se aktualizovaly.
Chamurappi
Profil
Reaguji na quatzaela:
Takže tady?
Tak nějak, akorát bez syntaktických chyb.

a javascript těmito daty potom vyplní formulář i s těmi animacemi
To je opět okamžik, kdy se něco mění a kdy tedy je možné zavolat to, co nyní zbytečně voláš každých padesát milisekund.
quatzael
Profil
Chamurappi:
Tak nějak, akorát bez syntaktických chyb.
Je tam nějaká chyba? Kde?

To je opět okamžik, kdy se něco mění a kdy tedy je možné zavolat to, co nyní zbytečně voláš každých padesát milisekund.
To je pravda. Ale stejně už to tak mám i v tý funkci, že se mi po uploadu volá jiný script, který načte nový hodnoty do sessionStorage..
Takže asi jsou ty setIntervals u těch checkboxů opravdu zbytečný..

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: