Javascript IE6

  • Guten Abend.

    Ich komm ums verecken nicht drauf, was hier geschieht.
    Bei diesem Script (eigentlich nix aufregendes) schmeisst mir der IE6 die Fehlermeldung

    Zitat


    Objekt erwartet


    um die Ohren.

    Die Zeilennummer variiert zwischen 46-49, was an sich ja auch nicht wirklich hilft, da die IE-Konsole meist falsche Zeilennummern auswirft.

    Hier das Script:

    Generell versuche ich per Mouseover die Funktion showMenu() aufzurufen.
    In dem Moment pfeifts im Browser :roll:

    Das ganze läuft auf einer Typo3 Installation, nutzt das Framework aber nicht sondern läuft quasi "nebenher".
    Firefox und Opera funktionieren.

    In der Hoffnung auf zündende Ideen, müde,
    Jojo


  • Moin.

    Ich denke, dass der IE bei der ersten Zeile rausgeht. Probier mal statt der typeof() Zeile nur mal so: if ($(menuDiv).innerHTML == "")

    Wenns nicht das ist, schmeiss mal alles aus der Funktion raus und setz es Stück für Stück wieder ein, dann findest du schnell den Fehler.

    Übrigens: mit $(menuDiv) machst du im Prinzip jedes mal ein document.getElementById(menuDiv) - also suchst jedes mal wenn du auf das Element zugreifst den ganzen DOM ab (ausser das JS Framework cached das Element, was ich aber bezweifle). Das ist ein Fehler, was sich bei grösserem Codeumfang schnell auf die Performance auswirkt. Setz Elemente, die du mehrmals brauchst, nur einmal:

    Code
    var menuDiv = $('menu_id');
  • danke für deine Antwort.

    Leider hat das keinen Erfolg gebracht.
    Habe die Zeile durch

    Code
    if(!$(menuDiv).hasChildNodes())


    ersetzt (was besser funktioniert in meinem Fall), aber auch das klappt nicht.

    Zudem habe ich an den Anfang des Scripts mal ein alert() rein gesetzt, gleich in die erste Zeile vor den Variableninitiationen, und nichts tut sich!

    Die Wirkung der $() Funktion war mir bewusst. Ich nutze das in dem Script glaube ich 4-5 mal, das kann ich verschmerzen ;)

    Jemand noch eine Idee?


  • Poste bitte mal den ganzen code als HTML Datei - dann seh ich mir das an.

    Zum $():
    Es ist nicht nur schneller, du schreibst auch weniger Code und dein Code bleibt wartbarer. Warum du dich bewusst für eine schlechtere Variante entscheidest kann ich mir nicht erklären :roll: Ausserdem: wenn du dir jetzt einen sauberen Code Stil angewöhnst, wird sich das mal auszahlen wenn du JS Projekte schreibst mit einigen tausend Zeilen Code. Dann machen solche Sachen halt einen Unterschied.

  • Das Problem war die Variable "class". Hab sie überall umbenannt und der Fehler ist weg.

    Persönlicher Tipp: ich würde das Menü-aufklappen onclick machen, nicht onhover. Nervt irgendwie so.
    Tipp2: für solche Sachen (Menü nachladen) eignet sich AJAX nur bedingt. Die Menüpunkte bleiben ja gleich. AJAX verwendet man am besten um verändernde Daten nachzuladen. Für gleichbleibende Daten ist es keine Schande das Menü zb. beim Seitenaufruf einfach in ne Javascript Variable zu packen und die zu verwenden. AJAX ist cool - sollte aber sinnvoll verwendet werden.

    2 Mal editiert, zuletzt von phore (3. Juli 2009 um 11:17)

  • du bist ein Schatz.
    Natürlich war es das :roll:
    Ist ja auch ein reservierter Name in IE's Javascript-Implementation.
    Der Wald....vor Bäumen...und so...

    Danke dir vielmals :)

    EDIT:// werde mir deinen Hinweis wegen der $()-Funktion zu Herzen nehmen. Hast damit natürlich recht.
    Das mit dem mouseover habe ich ebenfalls schon zur Sprache gebracht, ist aber so gewünscht, was soll ich machen.
    Die Checkboxen kommen letztendlich aus einer Datenbank, von daher kann ich da auf Ajax nicht verzichten


    Einmal editiert, zuletzt von jojo87 (3. Juli 2009 um 11:15)