Christoph Schnauß: dhtml-menue

Beitrag lesen

hi,

Javascript:

Zumindest ist der prinzipielle Ansatz deines Scripts richtig. Die Auswahl der Variablennamen ist jedoch inkonsequent:

if (document.getElementById) {
    isGecko = true;
}

Das versteht auch der IE 6, und der ist beileibe kein Gecko  -  und auch andere Browser, wie z.B. Konqueror, kommen damit gut klar. In vieen anderen Scripts hat sich für dieselbe Aufgabe der Variablennamen isDOM durchgesetzt, der trifft es auch besser.

if (isNN == true) {
  theObj = eval ("document."+lay);

Warum nimmt du "eval"?

theObj.visibility="visible";

Das Anzeigen bzw. Verbergen über "visibility" zu regeln, ist richtig.

die Seite ist zu sehen auf http://www.masterdigital.de/binninger/blank.html

Du hattest inzwischen genügend Zeit, um in der Forums-FAQ nachzulesen, wie hier Links gesetzt werden. Du meinst also http://www.masterdigital.de/binninger/blank.html

Das größere Problem bei deiner Fehlerbeschreibung ist aber, daß du das Macromedia-Script, das für deinen Scriptablauf viel entscheidender ist, hier noch unterschlagen hast. Mit diesen "MM_..."-Scripts gibt es immer wieder Schwierigkeiten  -  in der Regel sind sie in der Form, in der sie von dem benutzten Programm erstellt wurden, gar nicht nötig, und das scheint auch bei dir der Fall zu sein. Dazu kommt, daß du deine EventHandler nicht konsequent formulierst, was zu sehr merkwürdigen Ergebnissen führt: bei manchen Menüpunkten erscheint dein Submenü erst bei Mausklick, bei anderen bei Mausberührung, und manchmal verschwinden sie von selbst, manchmal auch erst wieder, wenn man mit der Maus irgendwo geklickt hat. Das _kann_ (muß aber nicht) damit zusammenhängen, daß du alle drei EventHandler (onmouseover, onmouseout und onclick) in einen link sperrst, die aber auf identische Funktionsteile zugreifen. Solche Notationen wie
  onmouseover="MM_nbGroup('over','img/leiste_r9_c1','img/leiste_r9_c1_f2.gif',
  'img/leiste_r9_c1_f3.gif',1); javascript:hide('mutze'); javascript:hide('schals');
  javascript:hide('fahne')"
sind darüberhinaus etwas ungeschickt. Das vorangestellte "javascript:" ist schlicht überflüssig, und dreimal dieselbe Funktion, wenn auch mit unterschiedlichen Parametern, aufzurufen, ist jedenfalls eine verbesserungswürdige Konstruktion.
Du fährst wahrscheinlich wesentlich besser, wenn du deine "hidden" und "visible"-Anweisungen oben im Script nochmals in eine Funktion mit neuem Namen zusammenfaßt, schematisch in ungefähr dieser Form:
  function click(param){
    if (...) hide(...);
    if (...) show(...);
  }
und dann diese Funktion an einen EventHandler übergibst, beispielsweise in der Form
  onclick="click(param)"
Die jeweils benötigten Parameter kannst du ja wieder über Variablen festlegen.

Du solltest also dein Macromedia-Script vollständig streichen und an dessen Stellen den prinzipiell richtigen Ansatz, den du bereits hast, ausbauen. Wenn du allerdings bereits so weit bist:

Ich habe mir auf einer anderen Seite angeschaut, wie dieser Mensch das gemacht hat.

sollte es dir nicht allzu schwer fallen, das, was bei dir von einer funktionierenden Lösung abweicht, zu korrigieren. Ob du deine "Layer" über "class" oder "id" ansprichst, ist letzten Endes egal (ich würde allerdings "id" bevorzugen).

Im übrigen gibt es zum Themenkomplex "zeigen und verbergen von DIVs" mehrere aussagekräftige Threads im Forums-Archiv.

Grüße aus Berlin

Christoph S.