Andreas Dechant: Fehlermeldung in FF und Opera bei script-Ausführung

Hallo zusammen!
Hab da ein kleines Problemchen:
Ich hab auch meiner Webseite ein CSS-Dropdown-Menü eingebaut, das mit den neuen Browsern ja ohne javascript funktioniert.
Desalb habe ich also im <head>-Bereich mit <!--[if lt IE 7]>
<![endif]--> noch ein externes js eingebunden, damit das Menü auch unter  IE 6 etc. läuft.
Nur bringt mir jetzt genau diese Browser-Weiche ein Problem, denn ich rufe die js-Funktion mit <body onLoad="menue()" auf. Den body-tag lesen natürlich aber alle Browser und daher schickt mir dann Opera9 und FF die js-Fehlerkonsole auf den Hals, mit der Meldung, dass die Funktion nicht definiert sei.
Ist mir ja auch klar warum, weil sie ja die Weiche im head-Bereich überspringen in dem die Funktion definiert ist.
Lauffähig ist die Sache natürlich trotzdem, aber das ist ja wirklich doof, wenn dem User (zb mit ff) beim Öffnen der Site gleich die Fehlerkonsole aufspringt.
Gibt es eine Möglichkeit, dass nur der IE onLoad="menue"() durchführt, damit bei den anderen Browsern die Fehlermeldung ausbleibt?

Per Auskommentieren gehts ja leider nicht, der hat ja innerhalb eines <tags> nix verloren...

Vielen Dank für die Hilfe,

Andreas

  1. Hi,

    Desalb habe ich also im <head>-Bereich mit <!--[if lt IE 7]>
    <![endif]--> noch ein externes js eingebunden, damit das Menü auch unter  IE 6 etc. läuft.
    Nur bringt mir jetzt genau diese Browser-Weiche ein Problem, denn ich rufe die js-Funktion mit <body onLoad="menue()" auf.

    warum setzt Du in Deinem JavaScript-Code nicht einfach die onload-Eigenschaft des window-Objektes?

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo zurück!
      Ich weiss nicht warum, aber im IE funktioniert das dropdown-menü nur, wenn ich die Funktion im <body>-tag aufrufe.
      Hier mal der Html-Code:

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml" lang="de-de">
      <head><meta content="text/html; charset=ISO-8859-1" http-equiv="content-type" />
      <title>Hersbrucker Harmonika Orchester e.V.</title>
      <meta content="Andreas Dechant" name="author" />
      <style type="text/css" media="screen">
        @import url("./stylesheets/layout.css");
        @import url("./stylesheets/menue.css");
      </style>

      <!--[if lt IE 7]>
      <script src="./javascripts/menue_ie.js" type="text/javascript"></script>
      <![endif]-->

      </head>

      <body onLoad="menue_for_ie()">

      <div id="header"></div>

      <div id="page">
      <div id="leftbox">
      <div id="menue">
      <ul class="dropdown" id="nav">

      <li><a href="">Zur Startseite</a></li>
      <li><a href="">Die Orchester</a>

      <ul>

      <li><a href="">Schülerorchester</a>

      <ul>

      <li><a href="">Orchestermitglieder</a></li>
        <li><a href="">Musikalische Leitung</a>

      <ul>
         <li><a href="">Daniela Kohl</a></li>
         </ul></li>
        <li><a href="">Weiterer Item</a></li>

      </ul></li>

      <li><a href="">Erwachsenenorchester</a>

      <ul>

      <li><a href="">Orchestermitglieder</a></li>
        <li><a href="">Musikalische Leitung</a>

      <ul>
         <li><a href="">Wolfgang Herger</a></li>
         </ul></li>
        <li> <a href="">Repertoire</a></li>
        <li> <a href="">Wettbewerbe</a></li>

      </ul></li>
       </ul></li>

      <li><a href="">Mediengalerie</a>

      <ul>

      <li><a href="">H&ouml;rproben</a></li>
        <li><a href="">Bilder</a></li>
        <li><a href="">Zeitungsberichte</a></li>
        </ul></li>

      <li><a href="">Der Verein</a>

      <ul>

      <li><a href="">Chronik</a></li>
        <li><a href="">Vorstandschaft</a></li>
        <li><a href="">Mitgliedschaft</a></li>
        </ul></li>

      <li><a href="">Kontakt</a>

      <ul>

      <li><a href="">Kontaktformular</a></li>
        <li><a href="">Anfahrtbeschreibung</a></li>
        </ul></li>

      <li><a href="">Forum &amp; G&auml;stebuch</a></li>
      <li><a href="">Linkliste</a></li>
      <li><a href="">Impressum</a></li>
      </ul>
      </div>
      </div>
      <div id="rightbox">
       Hatten Sie sich im letzten Beispiel gewundert,
           warum die &Uuml;berschrift dieser Box nicht als solche ausgezeichnet war?
           Da diese Info-Box im Quelltext vor dem Inhaltsbereich steht
           und erst in diesem die Haupt&uuml;berschrift notiert war,
           w&auml;re hier eine &Uuml;berschrift zweiten Grades noch nicht sinnvoll gewesen.
        Im Quelltext dieses Beispiels ist nun zuerst die Seiten&uuml;berschrift notiert,
           wodurch auch dieses semantische Problem gel&ouml;st ist.
      </div>

      <div id="centerbox">
      Seit zwei Jahren ist meine Arbeit in Düsseldorf. Meine Familie lebt dagegen in Hamburg. Und dazwischen ich, aber ganz cool. Vollbremskombination aus Ampel oder Einfädeln oder beides auf einmal. Geht nur mit Tricks. Eben noch kurz auf die A 52. Schon vielversprechend lebhaft. Hinter dem Breitscheider Kreuz geht es richtig los. Stau auf der A 3 bis Oberhausen. Danach entspannt es sich auch nur deshalb, weil enge Baustellen mit rüden Geschwindigkeitsbegrenzungen zum gleichmässigen Rollen zwingen. Es wird links überholt, es wird rechts überholt. Es wird gar nichts mehr, alles steht und macht lange Gesichter. Ich dagegen wechsle die Cassette. Es geht weiter. Vor und hinter mir hektische Spurenwechsel. So zieht sich das Stück A 2 bis zum Recklinghauser Kreuz. Der erhofften Entspannung folgt zuverlässig der Vollfrust. Die A 43 bis Münster ist genauso voll wie das Kamener Kreuz zur Rush-hour. Auf der A 1 ist dann endgültig Schluss mit lustig. Alles dümpelt auf der Überholspur. Natürlich mit 90. Rechts geht es schneller, irrerweise wegen der Lkws. Die wollen nämlich alle noch vor zehn zu Hause sein. Osnabrück. Dammer Berge. Tanken, weil kleiner Tank.
      </div>

      </div>

      <div id="footer">
      Das ist die Fusszeile!
      </div>

      </body>
      </html>

      --------------------------------------------------------

      Und dann hier noch den Inhalt der menue_ie.js:

      --------------------------------------------------------
      function menue_for_ie()
      {
       if (document.all)
       {
              uls = document.getElementsByTagName('UL');

      for(i = 0; i < uls.length; i++)
              {
                  if (uls[i].className == 'dropdown')
                  {
                      var lis = uls[i].getElementsByTagName('li');

      for (i = 0; i < lis.length; i++)
                      {
                          if(lis[i].lastChild.tagName == 'UL')
                          {
                              lis[i].onmouseover = function() { this.lastChild.style.display = 'block'; }
                              lis[i].onmouseout = function() { this.lastChild.style.display = 'none'; }
                          }
                      }
                  }
              }
          }
      }

      ----------------------------------------------------------------

      Herzlichen Dank für die Hilfe,

      Andreas

      1. Ich weiss nicht warum, aber im IE funktioniert das dropdown-menü nur, wenn ich die Funktion im <body>-tag aufrufe.

        keine hat gesagt dass du sie dort aufrufen sollt, du musst im conditional Comment den onload Event des winow Objektes setzen.

        Hier mal der Html-Code:

        Der war überflüssig, wir Wissen was du machst.

        <body onLoad="menue_for_ie()">

        Das kann nicht gehen.
        Du willst:

        window.onload = menue_for_ie;

        Struppi.

        --
        Javascript ist toll (Perl auch!)
        1. Jawohl, jetzt läuft die Sache.
          Danke für die Hilfe!

          Andreas

      2. Hi,

        Ich weiss nicht warum, aber im IE funktioniert das dropdown-menü nur, wenn ich die Funktion im <body>-tag aufrufe.

        falsch. Richtig ist: wenn Du sie onload aufrufst. Und das hat *nichts* mit dem <body>-Tag zu tun.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
      3. Hi


        Und dann hier noch den Inhalt der menue_ie.js:


        function menue_for_ie()
        {
        if (document.all)
        {
                uls = document.getElementsByTagName('UL');
        [...]

        Wenn das Menü sowieso nur für IEs ist, könnte man doch auch das All-Object benutzen, da das von allen IEs verstanden wird, während document.node doch erst ab IE 5/6 funzt, oder?

        mfg
        Genie