Autor Zpráva
marek187
Profil
<script type='text/javascript'>
function HideErrors()
{
    var errors = document.getElementsByClassName("error");
    for (var i=0;i<errors.length;i++) {
        errors[i].setAttribute("class", "hideerror");
    }
}
</script>

Vytvoril som si funkciu, ktorá mi má vyhľadať všetky elementy triedy "error" a má ju zameniť za triedu "hideerror". Lenže problém je v tom, že táto funkcia zamení triedu len na každom druhom elemente a nechápem prečo...

1. element - zmení na triedu "hideerror"
2. element - ostane trieda "error"
3. element - zmení na triedu "hideerror"
4. element - ostane trieda "error"
...
Jan Tvrdík
Profil
marek187:
Důvodem je, že volání getElementsByClassName vrací HTMLCollection a „HTMLCollections in the HTML DOM are live; they are automatically updated when the underlying document is changed.“, tedy obsah té kolekce (proměnné error) se ti v průběhu toho skriptu mění.
Chamurappi
Profil
Reaguji na marka187:
Upozorňuji, že stále dost rozšířený Explorer 8 nepodporuje getElementsByClassName.
Proč používáš na změnu třídy metodu setAttribute a ne vlastnost className?
marek187
Profil
Tak čo sa týka tochto problému a celkovo podpory s metódou getElementsByClassName pri starších prehliadačoch som sa teda rozhodol radšej pre nejakú alternatívu cez podporovanejšiu metódu getElementsByTagName. Skusil som dačo zrobiť, ale asi som dačo zrobil zle, lebo teraz ma pre zmenu úplne ignoruje a nerobi nič...

<script type='text/javascript'>
function HideErrors()
{
    var tags = getElementsByTagName('input');
    for(i=0;i<tags.length;i++){
         if(tags[i].className==='error') {
                tags[i].className='hideerror';
         }
    }
}
</script>
Jan Tvrdík
Profil
marek187:
getElementsByTagName volej na objektu document. Pak ti ještě chybí var u deklarace i = 0.
Chamurappi
Profil
Reaguji na marka187:
Kdyby ses mrknul do chybové konzole, možná by tě napadlo, že getElementsByTagName je metoda na documentu (nebo na některém z elementů).

A ten var z řádku 5 jsi mazat nemusel :-)
marek187
Profil
Ďakujem za opravy, je to nakoniec v tejto podobe a stále to dajako nefunguje...

function HideErrors()
{
    var tags = document.getElementsByTagName('input');
    for(var i=0;i<tags.length;i++){
         if(tags[i].className==='error') {
                tags[i].className='hideerror';
         }
    }
}
</script>
Jan Tvrdík
Profil
marek187:
stále to dajako nefunguje...
V tom případě bude problém ještě někde jinde, ten kód by měl být v pořádku.
marek187
Profil
A už to funguje, nechtiac som na začiatku nechal 2x <script type='text/javascript'>

Ďakujem ešte raz za pomoc všetkým ;)

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: