DaDyne: Mein animiertes Menü läuft im IE nicht

Ich habe mir für die Seite meiner Freundin in Menü ausgedacht bei dem Untermenüs mit einem Effekt "aufsliden" und habe das Ganze mit Javascript und der CSS-Eigenschaft clip realisiert.

Am besten mal (mit Firefox) ansehen für's Verständnis: http://www.mamameike.de
Die ersten beiden Menüpunkte haben keine Unterpunkte und linken einfach auf Inhaltsseiten. Der dritte Menüpunkt linkt nicht auf eine Inhaltsseite, sondern öffnet beim Klick darauf ein Submenu.

Der Internetexplorer meldet nur:
Fehler auf der Seite
Zeile: 6
Zeichen: 3
Fehler: Ungültiges Argument.
Code: 0
URL: http://mamameike.de/

Leider habe ich für den IE nicht so schöne Debugging-Tools wie für Firefox (Firebug, etc) und weiß nicht welcher Code im Javascript den Fehler auslöst.

Kann mir jemand bei der Fehlersuche helfen?

  1. Hi,

    Erstens:

    if(ul.tagName == "UL"){

    kann ich nicht ganz nachvollziehen. tagName ist doch eine Eigenschaft des all Objekts?!

    document.all.nav.tagName würde gehen.

    Zweitens:

    ul.style.left=e.pageX-15;

    ist Netscape spezifische Syntax

    Drittens:

    ul.style.clip="rect(0px, 0px, 0px, auto)";

    IE's haben ein Problem mit clip, du musst die Kommata weglassen.

    Gruß
    Antipitch

    1. Hallo,

      if(ul.tagName == "UL"){
      kann ich nicht ganz nachvollziehen. tagName ist doch eine Eigenschaft des all Objekts?!

      document.all.nav.tagName würde gehen.

      Das klingt etwas missverständlich, da bist du wohl auf SELFHTML hereingefallen... Für den Fall:

      document.all ist proprietäres Objekt, über welches Elemente auf verschiedene Weise angesprochen werden können. tagName ist keine Eigenschaft von document.all selbst (document.all.tagName wäre Unsinn), sondern liefert einfach nur gewisse Elemente zurück, z.B. ist document.all.nav nichts anderes als das Elementobjekt, das auch document.getElementById("nav") zurückliefert.

      tagName ist also eine proprietäre Eigenschaft von Elementobjekten, die in mehreren Browsern unterstützt wird. Ob man das Objekt nun über document.all.usw. anspricht oder über standardisierte Methoden, ist zum Zugriff auf die Eigenschaft egal. Das bringt SELFHTML leider nicht so klar herüber, sondern suggeriert, die proprietären Eigenschaften würden irgendwie mit der proprietären Ansprechmethode zusammenhängen.

      Es ist daher nichts damit gewonnen, eher Browserkompatibilität verloren, wenn man document.all zum Ansprechen benutzt. (Die standardkonforme Alternative zu tagName ist übrigens nodeName, wo im Falle eines Elementknotens der Tag-Name drinsteht.)

      Mathias

      1. Hi Mathias,

        Das klingt etwas missverständlich, da bist du wohl auf SELFHTML hereingefallen... Für den Fall:

        document.all ist proprietäres Objekt, über welches Elemente auf verschiedene Weise angesprochen werden können. tagName ist keine Eigenschaft von document.all selbst (document.all.tagName wäre Unsinn), sondern liefert einfach nur gewisse Elemente zurück, z.B. ist document.all.nav nichts anderes als das Elementobjekt, das auch document.getElementById("nav") zurückliefert.

        meine Antwort klingt so, da hast du Recht, war mir aber schon bewußt. Allerdings hab ich über Sinn und Art der Benutzung an dieser Stelle

        if(ul.tagName == "UL"){

        nicht weiter reflektiert und insofern meine Beratung etwas vorschnell abgebrochen anstatt sie hiermit

        Es ist daher nichts damit gewonnen, eher Browserkompatibilität verloren, wenn man document.all zum Ansprechen benutzt. (Die standardkonforme Alternative zu tagName ist übrigens nodeName, wo im Falle eines Elementknotens der Tag-Name drinsteht.)

        forzusetzen ;-)

        Danke & Gruß
        Antipitch

  2. Grütze .. äh ... Grüße!

    Der Internetexplorer meldet nur:
    Fehler auf der Seite
    Zeile: 6
    Zeichen: 3

    kann gerade nicht testen, daher nur eine Vermutung anhand der Zeilennr.
    Vielleicht stört er sich an der fehlenden Einheit bei ul.style.top und ul.style.left in expand


    Kai

    --
    Der vertuschte Gefahrstoff: Dihydrogenmonoxid
    ie:{ fl:( br:< va:) ls:? fo:| rl:? n4:° ss:{ de:] js:| ch:? mo:| zu:|
  3. Danke für eure Hilfe.

    Ich habe jetzt die Einheiten ergänzt und habe eine Browserweiche eingebaut (ich nehme dabei momentan nur auf IE und Netscape-Browser Rücksicht) um jetzt jeweils screenX oder pageX zu benutzen.

    Ein Problem habe ich noch: ich habe im bodytag den event-Handler onmouseup="close()". close schließt alle offenen submenüs.
    Das soll nach jedem Klick auf die Seite ausgeführt werden. (Würde ich onclick benutzen, würden die Links in den Submenüs nicht funktionieren, da das Submenü schließt, bevor der Link aktiviert wurde)

    Im Internet-Explorer 6 wird close aber nicht ausgeführt. Ich habe testweise ein alert in close eingbaut, aber egal wo ich klicke nirgends greift der event-Handler.

    Wieso nicht?