Autor | Zpráva | ||
---|---|---|---|
marek187 Profil |
#1 · Zasláno: 11. 7. 2013, 23:36:11
<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 |
#3 · Zasláno: 11. 7. 2013, 23:52:14
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 |
#4 · Zasláno: 11. 7. 2013, 23:57:24
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 |
#5 · Zasláno: 12. 7. 2013, 00:02:26
marek187:
getElementsByTagName volej na objektu document . Pak ti ještě chybí var u deklarace i = 0 .
|
||
Chamurappi Profil |
#6 · Zasláno: 12. 7. 2013, 00:03:56
Reaguji na marka187:
Kdyby ses mrknul do chybové konzole, možná by tě napadlo, že getElementsByTagName je metoda na document u (nebo na některém z elementů).
A ten var z řádku 5 jsi mazat nemusel :-)
|
||
marek187 Profil |
#7 · Zasláno: 12. 7. 2013, 00:08:46
Ď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 |
#8 · Zasláno: 12. 7. 2013, 00:11:58
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 |
#9 · Zasláno: 12. 7. 2013, 00:20:43
A už to funguje, nechtiac som na začiatku nechal 2x
<script type='text/javascript'>
Ďakujem ešte raz za pomoc všetkým ;) |
||
Časová prodleva: 11 let
|
0