Hieronder een voorbeeldcode uit mijn spoiler-BBCode (zie ook hier), hij werkt alleen niet. Ik wil dat de spoilers die tot die spoilergroup behoren sluiten als ik de volgende open, zodat er altijd maar 1tje van die group geopend is.
Ik vermoed dat de document.getElementsByName('spgroup1').style.display = 'none'; nog niet klaar is als hij begint met document.getElementById('spoiler0').style.display = 'block'; en dat hij daarom altijd op none blijft staan...
Dat er ook andere spoilers zijn met de naam spgroup1 maar de id uniek is. Ik wil dat elke spoiler met naam "spgroup1" op none staat, op die ene (met id spoiler0) na.
Dat gaat helaas niet gezien mijn php-code die dit construeert... Daarnaast ben ik sowieso eerder benieuwd naar wat er fout is, dan naar een kloppende code te krijgen..
Dan even over je script:
- Je haalt meerdere keren document.getElementById('spoiler0') op of document.getElementsByName('spgroup1'). Dat kost allemaal tijd, beter is het om dit 1 keer op te halen en dat het element in een variabele te stoppen en die variabele te gebruiken.
- Je haalt alle elementen op met name="spgroup0" (name attribute is oud, je kan beter class attribuut gebruiken). Je krijgt dan een array met al deze elementen terug. Je moet dus met een for loop door de array lopen en elk element style="display: none;" meegeven:
var elems = document.getElementsByName('spgroup0');
for( i=0, len = elems.length; i < len; i++ ) {
elems[i].style.display = 'none';
}
Wouter, sorry, maar volgens mij begrijp je mijn vraag niet zo goed.Ik ben hier niet voor les in PHP of javascript, ik wil alleen weten wat er mis is met mijn code, waarom hij niet werkt.
Verder werkt de getElementsByClass niet op elke browser, en werkt mijn code prima op dat ene block foutje na, en ik wil graag weten hoe ik dit opgelost krijg. Ik he ook al verschillende dingen geprobeerd (zelfs met een var t=setTimeOut()) maar ik weet niet hoe ik dit op moet lossen, ook omdat ik niet weet wat het probleem is.
@Jyy An, volgens mij beantwoord ik ook telkens je vraag. Wat is fout is is dit:
- Je haalt alle elementen op met name="spgroup0" [size=xsmall](name attribute is oud, je kan beter class attribuut gebruiken)[/size]. Je krijgt dan een array met al deze elementen terug. Je moet dus met een for loop door de array lopen en elk element style="display: none;" meegeven: