javaS dropdown menu IE anzeigefehler

Moin Moin
Ich kenne mich kein Bisschen mit Java-script aus und habe den QC für die Dropdownfunktion kopiert und bearbeitet.
Firefox zeigt alles richtig an, im Gegensatz zum Explorer. Hier sind die Menu-unterpunkte schon sichtbar und der Browser reagiert nicht auf den Onmouseover Befehl. Wäre nett wenn mich Jemand korrigiert oder mir eine bessere Lösung zeigt.

Code(JavaS+css):

<!–
window.onload=montre;
function montre(id) {
var d = document.getElementById(id);
for (var i = 1; i<=10; i++) {
if (document.getElementById(‚smenu‘+i)) {document.getElementById(‚smenu‘+i).style.display=‚none‘;}
}
if (d) {d.style.display=‚block‘;}
}
//–>

div#navi {
border-style:outset;
border-color:#999999;
background-color:#aaaaaa;
border-width:0.5em;
width:10em;
margin-bottom:3em;
}

ul#navi {
list-style:none; position:absolute; top:258px; left:170px; z-index:100;
}

ul#navi2 {
list-style:none; position:absolute; top:213px; left:170px; z-index:101;
}
ul#navi3 {
list-style:none; position:absolute; top:400px; left:170px; z-index:102;
}

dt#navi {
cursor:stuck_out_tongue:ointer;
}


Code(html):

Moin,

ich weiß nicht, ob es daran liegt, aber der erste Fehler steckt gleich in der ersten Zeile:

window.onload=montre;

Abgesehen davon, dass die Klammern schon mal fehlen, fehlt auch die ID, die in der nächsten Zeile ja im Funktionskopf definiert ist. Dort steht

function montre(id)

, was bedeutet, dass ein Parameter erwartet wird. Anhand dieses Parameters wird vom angegebenen Element der Style auf „Display=Block“ gesetzt, was auch immer das bedeutet.

Die Elemente im Quelltext haben alle irgendwelche IDs (Namen) bekommen. Welcher davon nun gemeint ist, weiß ich nicht. Guck nochmal im Original-Quelltext, ob Du da was findest.

Abgesehen davon würde ich das „onLoad“ nicht in den Script-Bereich schreiben, sondern ins Body-Tag. Beispiel: http://de.selfhtml.org/javascript/sprache/eventhandl…

Vielleicht reicht das ja schon als Hinweis. Falls nicht, nochmal fragen.

Kristian

Hallo Kristian,

aber der erste Fehler
steckt gleich in der ersten
Zeile:

window.onload=montre;

Abgesehen
davon, dass die Klammern schon mal fehlen

Im Gegenteil: Da haben ja auch keine Klammern zu stehen! Das wäre bei dieser Notation geradezu falsch.

fehlt auch die ID,
die in der nächsten Zeile ja im Funktionskopf definiert ist.
Dort steht

function montre(id)

, was
bedeutet, dass ein Parameter erwartet wird.

Parameter können je nachdem auch optional sein und bei Fehlen innerhalb der Funktion mit Defaultwerten belegt werden.

Abgesehen davon würde ich das „onLoad“ nicht in den
Script-Bereich schreiben, sondern ins Body-Tag.

Das ist Geschmackssache. Ich persönlich bevorzuge -so möglich- die strikte Trennung von HTML, CSS und Javascript.

Auch Eventhandler einzelner Elemente im Dokument kann man dynamisch onload des Windows setzen.

Gruß Gernot

Hallo Alex,

ich würde mich an deiner Stelle für solche Zwecke an Vorlagen orientieren, die weitgehend ohne Javascript auskommen und allein für die defekten älteren IEs zusätzlich Javascript einsetzen.

http://de.selfhtml.org/css/layouts/anzeige/nav_moder…

Auf- und Zuklappen von (Unter)Menüs, das geht in aller Regel auch ausschließlich mit CSS.

Ich kenne mich kein Bisschen mit Java-script aus

Noch ein Grund mehr, stattdessen auf CSS zu setzen!

Gruß Gernot

Im Gegenteil: Da haben ja auch keine Klammern zu stehen! Das
wäre bei dieser Notation geradezu falsch.

Okay, stimmt.

Parameter können je nachdem auch optional sein und bei Fehlen
innerhalb der Funktion mit Defaultwerten belegt werden.

Das ist richtig, aber das passiert nicht, und manche Browser hängen sich an sowas auf und führen weiteren Code nicht mehr aus. Und ich sagte ja, dass ich nicht wüsste, ob es daran liegt :wink:

Das ist Geschmackssache. Ich persönlich bevorzuge -so möglich-
die strikte Trennung von HTML, CSS und Javascript.
Auch Eventhandler einzelner Elemente im Dokument kann man
dynamisch onload des Windows setzen.

Prinzipiell richtig. Manchmal ist es aber transparenter, wenn man davon Ausnahmen macht Das onLoad ist so ein Beispiel, finde ich.

Übrigens habe ich in den vergangenen Jahren auch durch solche „Neben-Diskussionen“, die an mir als Fragesteller ein bisschen vorbeigingen, viel gelernt :wink:

Kristian

Hallo Kristian,

Parameter können je nachdem auch optional sein und bei Fehlen
innerhalb der Funktion mit Defaultwerten belegt werden.

Das ist richtig, aber das passiert nicht,

Doch in gewisser Weise passiert das hier: id wurde nicht übergeben, Variable d bleibt damit „undefined“, was bei einer IF-Abfrage „false“ entspricht, also gibt es auch keinen Versuch, d in seiner Style-Display-Eigenschaft zu verändern:
var d = document.getElementById(id);
/*…*/
if (d) {d.style.display=‚block‘;}
Das Ein- und Ausblenden funktioniert ja übrigens auch in meinem IE7 und im Firefox und führt zu keinen Fehlermeldungen.

Übrigens habe ich in den vergangenen Jahren auch durch solche
„Neben-Diskussionen“, die an mir als Fragesteller ein bisschen
vorbeigingen, viel gelernt :wink:

Dito!

Auf die Gefahr hin, dass diese Off-Topic-Bemerkung gelöscht wird:

Während Nebendiskussionen beim SELFHTML-Forum oft ausufern, sind mir die Moderatoren in manchen Unterforen von W-W-W ein bisschen gar zu streng.

Gruß Gernot