Autor Zpráva
Fisir
Profil
Mám nevímkolik checkboxů (nejsou ve formuláři; počet se každou chvíli mění) a pokud bude alespoň jeden zaškrtnutý, zobrazím nějaký element. V opačném případě daný element skryji. Použil jsem tento skript:
function arCheck(id){
        var name = "c[]";
        var pole = document.getElementsByName(name);
        for(i = 0; i < pole.length; i++) {
              if(pole[i].checked == true){
              document.getElementById("arE").removeAttribute("class");
            } else if(pole[i].checked == false){
                document.getElementById("arE").className = "hidden";
            };
        };
};
Který ovšem nefungoval. Dříve jsem sestavil jiný skript, který měl tu nevýhodu, že element skryl vždy, když se nějaký checkbox odškrtnul.

Chtěl bych vědět proč to nefunguje a pokud by jste byli tak hodní, mohli by jste mi i prozradit, jak to dát do pořádku. Děkuji
_es
Profil
Fisir:
document.getElementById("arE").removeAttribute("class")
Čo čakáš, že tento príkaz spraví?
Fisir
Profil
Reaguji na _es [#2]:
Odstraní atribut class.
_es
Profil
Fisir:
Odstraní atribut class.
No a to „odstránenie“ by malo spôsobiť čo?
Na nastavenie triedy máš vlastnosť className, ako v 8. riadku kódu.
Chamurappi
Profil
Reaguji na Fisira:
Chtěl bych vědět proč to nefunguje
Krom nespolehlivého removeAttribute je problém především v tom, že element skrýváš/zobrazuješ v každém kroku. Měl by sis projet všechny elementy, zapamatovat si, jestli je alespoň jeden zaškrtnutý, a pak teprve vykonvat skrytí/zobrazení.
Fisir
Profil
Reaguji na _es [#4]:
Způsobí zobrazení elementu (má třídu hidden).

Reaguji na Chamurappiho [#5]:
Děkuji, odpoledne vyzkouším a dám vědět.
_es
Profil
Fisir:
Zrušenie tried elementu spravíš nastavením vlastnosti className na prázdny textový reťazec.
Radek9
Profil
Fisir:
Způsobí zobrazení elementu
Ve všech prohlížečích? Mrkni na tohle vlákno.
Fisir
Profil
Reaguji na Chamurappiho [#5]:
Moc ti děkuji, finální podoba je tato:
function arCheck(id){
        var name = "c[]";
        var pole = document.getElementsByName(name);
        for(i = 0; i < pole.length; i++) {
              if(pole[i].checked == true){
              var checked = true;
            };
        };
        if(checked == true){
             document.getElementById("arE").className = "";
        } else {
            document.getElementById("arE").className = "hidden";
        };
};
Radek9
Profil
Fisir:
Řádky:
1) Definuješ proměnnou id, ale nikde ji nepoužiješ.
5) Nemusíš to porovnávat s true. Podmínky jsou od toho, aby braly boolean, v checked je.
6) Tady by se hodil ještě break.
7, 8) Proč ten středník?
9) Viz 5.
13, 14) Viz 7 a 8.
Fisir
Profil
Reaguji na Radka9 [#10]:
Definuješ proměnnou id, ale nikde ji nepoužiješ.
Zatím.

Nemusíš to porovnávat s true.
Ale můžu. Proč bych neměl?

Tady by se hodil ještě break.
Na co? Funguje to i bez toho.

Proč ten středník?
Protože se příkazy mají ukončovat středníkem. Něčemu vadí?
Radek9
Profil
Fisir:
Ale můžu. Proč bych neměl?
Protože je to zbytečnost. Boolové podmínky se odjakživa ověřují jen takto:
var prom = true;
if(prom){
  …
}
Mimo to používáš jen shodnost (==), ne totožnost (===).

Na co? Funguje to i bez toho.
Zbytečně procházíš další prvky. Stačí přece najít jen jeden vyhovující, ne?

Protože se příkazy mají ukončovat středníkem. Něčemu vadí?
Ale ne blokové příkazy. Platnost if, else, function, with a podobných jsou omezeny složenými závorkami.
peta
Profil
Radek9:
Odjakziva se podminky na true overuji takto:
(prom === true)
V pripade toho checked tedy vyjimecne
(prom == true)
Z toho zapisu je zrejme, ze to porovnavas s true a ne treba (prom==1) nebo (window.prom). Coz je uplne jiny zapis. Kdyz tam budes mit ==true, tak u mne mas male bezvyznamne plus. Programator, ktery kod prevezme bude vedet, ze ta promenna ma nabyvat jen hodnotu true nebo false. Pokud to tam nedas, nepovazuji tvuj kod za dobry.
Chamurappi
Profil
Reaguji na peta:
Kdyz tam budes mit ==true, tak u mne mas male bezvyznamne plus.
Což je vskutku bezvýznamné. Od kdy dbáš na krásu kódu? Pokaždé, když se tu objeví nějaká oběť tvých výukových postupů, se odpovídajícím při pohledu na kód naježí všechny chlupy.

Programator, ktery kod prevezme bude vedet, ze ta promenna ma nabyvat jen hodnotu true nebo false.
V jeho případě nabývá hodnot true, nebo undefined.
Radek9
Profil
peta:
Pokud to tam nedas, nepovazuji tvuj kod za dobry.
Já většinu tvých kódů nepovažuji za dobré a nějaký tvůj názor na mé kódy mě absolutně nezajímá. Kód bude přehledný ať to tam dáš, nebo ne. Pokud nepíšu jako prase, mám celkem dobrý přehled o mých proměnných, takže si ty rovnítka a true můžu odpustit. Bude to mít v tomto případě stejný efekt.
Fisir
Profil
Chtěl bych jen dodat, že mě se v tom mém kódu orientuje dobře, a když tam ono == true je, líp to chápu. Proto ho tam nechám, přece tam být může.
_es
Profil
Fisir:
Protože se příkazy mají ukončovat středníkem.
V JS ale stačí príkazy bodkočiarkou len oddeľovať. V iných programovacích jazykoch môže byť zakončovanie bodkočiarkou povinné, no ani tam ich nie je nutné dávať za koniec bloku. Teda v [#9] je bodkočiarka nadbytočná v 7., 8., 13., a 14. riadku a to aj pri obdobnom kóde trebárs v C a aj v 6., 10., a 12. riadku.
peta
Profil
Chamurappi: "Zdravim, udělal jsem kalkulaku v javacsriptu" - on to prohlasil za svuj kod, tim padem tva poznamka je bezpredmetna.
Ale dik za upozorneni. Zrovna tu kalkulacku nemam dodelanou, takze mi to tolik nevadi.
Nicmene, ten kod je dobry a o moc prehledneji uz to napsat nejde. Je videt, ze jsi ho vubec nestudoval.

Ano, ale pouze v pripade checked vlastnosti.

_es:
Zalezi na tom, co s tim kodem dale chces delat. Pro analyzatory nebo minimalizery je dobre dodrzovat urcitou syntaxi, protoze nejspis nemaji osizene parsery. Novy radek ti nepremeni na strednik a muze to zmenit vysledek scriptu.
V pythonu jsem ted potreboval neco dat na 1 radek a musel jsem tam ty stredniky dopisovat, abych oddelil jednotlive prikazy.
_es
Profil
peta:
Novy radek ti nepremeni na strednik a muze to zmenit vysledek scriptu.
Tých nadbytočných sedem bodkočiarok spomenutých v [#17] by bolo nadbytočných, aj keby v kóde v [#9] žiadne konce riadkov neboli.

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: