Hallo Forumler!
ich ärgere mich jetzt schon stunden mit diesem problem herum und komme auf keinen grünen zweig.
kurz gesagt handelt es sich um ein menü, unter dessen menüpunke sich div-layer mit dem submenü ein und ausblenden.
von der struktur her siehts so aus:
<script language="JavaScript" type="text/JavaScript">
function getLayerRef(id){
//ermittelt die 'browserübergreifende' referenz des gesuchten Layers.
}
function setLayerDisp(id, anzeige){
//setzt .visibility und .display des entsprechenden Layers
}
function hideAll(){
//versteckt alle Layer/Submenüs
//(verwendet setLayerDisp() )
}
</script>
im body steht:
<a href="subseite.htm" target="mainFrame" onClick="hideAll();setLayerDisp('Layer1', true);return false;">erstes submenü öffnen</a>
<div id="Layer1" style="position:relative; z-index:1; visibility: hidden; display:none;">...</div>
soweit so gut. funktioniert auch. allerdings soll einiges mehr auf diesen klick passieren weshalb ich alle funktionsaufrufe nicht in den eventhandler stecken möchte sondern in eine eigene funktion namens
subMenue('choice'){
hideAll();
setLayerDisp(choice,true);
}
die ich dann mit onClick="subMenu('Layer1');" aufrufen kann.
und genau dann funktioniert überhaubt nichts mehr. egal, was ich versuche.
ich bin noch ziemlich unerfahren mit javascript aber es bringt mich jedesmal zur verzweiflung.
hier mein code im genauen:
/* ebenen referenzieren //IE4+, NC4+, Moz u. Deriv., Op5.2+ */
function getLayerRef ( id, document) {
if (!document) document = window.document;
if (document.layers) { for (var l = 0; l < document.layers.length; l++) { if (document.layers[l].id == id) return document.layers[l]; }
for (var l = 0; l < document.layers.length; l++) { var result = getLayerRef(id, document.layers[l].document); if (result) return result; }
return null; }
else if (document.all) { return document.all[id]; }
else if (document.getElementById) { return document.getElementById(id); }
}
function hideAll(){
setLayerDisp('Layer1', false);
setLayerDisp('Layer2', false);
setLayerDisp('Layer3', false);
}
function setLayerDisp(option, action){
objLayer = getLayerRef(option);
if(document.layers){
objLayer.visibility = (action == true) ? 'show' : 'hide';
objLayer.display = (action == true) ? 'block' : 'none';
} else {
objLayer.style.visibility = (action == true) ? 'visible' : 'hidden';
objLayer.style.display = (action == true) ? 'block' : 'none';
}
}
bin für jeden verbesserungsvorschlag dankbar
danke im voraus,
richard