Hallo php.de-Community.
Ich schreibe momentan eine kleine Navigation. Diese Navigation besteht aus maximal 3 Ebenen und zwar sieht das so aus:
- Links der 1. Ebene
- Kategorie 1
- Links der 2. Ebene
- Kategorie 2
Das ganze soll dann Ebenenmäßig ein und ausklappbar sein. Damit jedoch auch benutzer ohne Javascript zurechtkommen, wird das Menü beim aufbau der Seite vollständig eingeblendet und erst nach dem laden der Website (falls aktiviert) mit Javascript zusammengeklappt.
Das ganze funktioniert auch einwandfrei
aber nur im Firefox (Dort auch ohne Fehler oder Warnungen in der Fehlerkonsole)
Führt man das ganze dann aber im Internet Explorer (Microsoft) aus. Klappt sich das Menü nicht zusammen.
Ich habe herausgefunden, dass anscheinen die variablen second_ul_layer und third_ul_layer leer bleiben
Code:
var master_ul
var second_ul_layer
var third_ul_layer
function navigation_init() {
var nav_div = document.getElementById("leftnavi")
var uls = nav_div.getElementsByTagName("ul")
for(var i = 0; i < uls.length; i++) {
if (uls[i].parentNode == nav_div) {
master_ul = uls[i]
break
}
}
second_ul_layer = new Array()
for(i = 0; i < uls.length; i++) {
if(uls[i].parentNode == master_ul) {
second_ul_layer.push(new Object())
index = second_ul_layer.length - 1
second_ul_layer[index] = uls[i]
}
}
third_ul_layer = new Array()
for(var l = 0; l < second_ul_layer.length; l++) {
for(i = 0; i < uls.length; i++) {
if(uls[i].parentNode == second_ul_layer[l]) {
third_ul_layer.push(new Object())
index = third_ul_layer.length - 1
third_ul_layer[index]['object'] = new Object()
third_ul_layer[index]['object'] = uls[i]
third_ul_layer[index]['parent'] = new Object()
third_ul_layer[index]['parent'] = second_ul_layer[l]
}
}
}
navigation_hide_all_second_layer()
}
function navigation_hide_all_second_layer() {
for(var i = 0; i < second_ul_layer.length; i++) {
layer = second_ul_layer[i]
navigation_hide_all_third_layer(layer)
layer.style.display = 'none'
}
}
function navigation_hide_all_third_layer(second_layer) {
for(var i = 0; i < third_ul_layer.length; i++) {
if(third_ul_layer[i]['parent'] == second_layer) {
third_ul_layer[i]['object'].style.display = 'none'
}
}
}
function navigation_open(category_li) {
var sibling = category_li.nextSibling.nextSibling
var open = (sibling.style.display == 'block') ? false : true;
if(category_li.parentNode == master_ul) {
navigation_hide_all_second_layer()
if(open) {
sibling.style.display = 'block'
}
}
else {
navigation_hide_all_third_layer(category_li.parentNode)
if(open) {
sibling.style.display = 'block'
}
}
}
Habt ihr eine Idee warum?
//PS.:
gab es nicht mal so eine art Fehlerkonsole im MSIE? Ich finde die einfach nicht mehr.