Skynet: IE meldet Javascript Fehler aber funktioniert trotzdem?

Hi,

ich habe ein kleines Problem mit meinem IE6. Ich blende über das Script unten, 6 verschiedene DIV-Container ein und auch wieder aus. In allen Browsern (Firefox 1.02, Netscape 7.1, Opera 7.54) die ich ausprobiert habe, funktioniert das Script, in IE zwar auch jedoch meldet er in der Statusleiste eine Fehlermeldung "Fehler auf der Seite" sobald die Funktion zum umschalten der DIVs aufgerufen wird.

Funktion:

function newsort(sort_order) {
var option = new Array("startdate_asc", "startdate_desc", "enddate_asc", "enddate_desc", "alphabetical_asc", "alphabetical_desc");
for(var x = 0; x <= option.length; x++) {
  if(option[x] == sort_order) { this.document.getElementById(option[x]).style.display = "block"; }
  else { this.document.getElementById(option[x]).style.display = "none"; }
}
}

Das aufrufen der Funktion läuft wie folgt:
<a href="javascript:newsort('startdate_asc')"><img src="img/arrow_asc.gif" id="img" alt="Sortierung aufsteigend" /></a>

Wie gesagt, funzt jeder Browser, nur IE meldet einen Fehler, führt anscheinend das Script aber richtig aus.

Habe ich einen Fehler übersehen?

  1. Hi,

    [...] IE [meldet] in der Statusleiste eine Fehlermeldung "Fehler auf der Seite"

    nämlich welchen?

    <a href="javascript:newsort('startdate_asc')">

    Das ist weder gültiger JavaScript-Code, noch eine gültige URL.

    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. » nämlich welchen?

      <a href="javascript:newsort('startdate_asc')">

      Das ist weder gültiger JavaScript-Code, noch eine gültige URL.

      IE schreibt bloß den genannte Text "Fehler auf der Seite" in die Statusleiste, mehr macht es nicht. Leider kann ich dir nicht viel mehr sagen als diesen Fehler.

      Zum zweiten, tut mir leid, der Code oben ist in PHP eingebettet, deswegen mussten die ' mit \ escaped werden.

      Der Code steht später dann ohne die \ im Quellcode:

      <a href="javascript:newsort('startdate_asc')"><img src="img/arrow_asc.gif" id="img" alt="Sortierung aufsteigend" /></a>

      1. Hi,

        IE schreibt bloß den genannte Text "Fehler auf der Seite" in die Statusleiste, mehr macht es nicht.

        ich benutze den IE zwar selbst nicht, aber ich weiß, dass diese Meldung nur der Hinweis darauf ist, dass Du genaue Informationen erhalten kannst.

        Zum zweiten, tut mir leid, der Code oben ist in PHP eingebettet, deswegen mussten die ' mit \ escaped werden.

        *seufz* Bei clientseitigen Problemen eliminiere bitte _allen_ serverseitigen Code _vollständig_. Er kann niemals nutzen, wohl aber - wie Du hier siehst - schaden.

        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. ich benutze den IE zwar selbst nicht, aber ich weiß, dass diese Meldung nur der Hinweis darauf ist, dass Du genaue Informationen erhalten kannst.

          Danke, wieder was dazu gelernt.
          Er meldet einen Fehler in dieser Zeile bei Zeichen 10:
          else { this.document.getElementById(option[x]).style.display = "none"; }

          *seufz* Bei clientseitigen Problemen eliminiere bitte _allen_ serverseitigen Code _vollständig_. Er kann niemals nutzen, wohl aber - wie Du hier siehst - schaden.

          Ich hab eine neue Datei genommen, ohne alles und das ganze mal ohne PHP und alle sonstigen Formatierungen noch einmal ausprobiert mit demselben Ergebnis.

          Hier der Code im ganzen, werde echt nicht schlau daraus.

          <html>
          <head>
          <title>Untitled Document</title>
          <script language="JavaScript">
          function newsort(sort_order) {
          var option = new Array("startdate_asc", "startdate_desc", "enddate_asc", "enddate_desc", "alphabetical_asc", "alphabetical_desc");
          for(var x = 0; x <= option.length; x++) {
            if(option[x] == sort_order) { this.document.getElementById(option[x]).style.display = "block"; }
            else { this.document.getElementById(option[x]).style.display = "none"; }
          }
          }
          //-->
          </script>
          </head>

          <body>
          <a href="javascript:newsort('startdate_asc')">Sortierung 1</a>
          <a href="javascript:newsort('startdate_desc')">Sortierung 2</a>
          <a href="javascript:newsort('enddate_asc')">Sortierung 3</a>
          <br>
          <div id="startdate_asc" style="display: block;">
          Sortierung 1
          </div>
          <div id="startdate_desc" style="display: none;">
          Sortierung 2
          </div>
          <div id="enddate_asc" style="display: none;">
          Sortierung 3
          </div>
          </body>
          </html>

          1. Hi,

            Er meldet einen Fehler in dieser Zeile bei Zeichen 10:
            else { this.document.getElementById(option[x]).style.display = "none"; }

            dann liegt der Fehler entweder dort oder kurz davor. Warum soll Deine Funktion eigentlich ein document-Objekt besitzen?

            Ich hab eine neue Datei genommen, ohne alles und das ganze mal ohne PHP und alle sonstigen Formatierungen noch einmal ausprobiert mit demselben Ergebnis.

            Das, was der Server zurückliefert, ist bereits ohne PHP. Du brauchst das nicht manuell herzustellen, sondern einfach auf diese Daten zurückgreifen, anstatt auf den PHP-Code.

            <script language="JavaScript">

            ERROR: Required attribute "type" missing.

            for(var x = 0; x <= option.length; x++) {

            Jemand in diesem Thread hat ja bereits darauf hingewiesen, dass eine Liste nur selten ein Element mehr hat als es besitzt.

            <a href="javascript:newsort('startdate_asc')">Sortierung 1</a>
            <a href="javascript:newsort('startdate_desc')">Sortierung 2</a>
            <a href="javascript:newsort('enddate_asc')">Sortierung 3</a>

            Das ist übrigens eine sortierte Liste, also ein <ol>.

            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. Danke an alle für die Antworten.

              Der Fehler lag bei der Abbruchbedingung für die for-Schleife. Sie wurde einmal zuviel durchlaufen. Hätt ich eigentlich gleich sehen sollen *schäm* :(

              Thx...

          2. hi,

            var option = new Array("startdate_asc", "startdate_desc", "enddate_asc",

            elemente mit diesen drei IDs sehe ich in deinem beispielcode, aber

            "enddate_desc", "alphabetical_asc", "alphabetical_desc");

            wo bitte soll der browser den elemente mit diesen IDs finden?
            in deinem code gibt's sie jedenfalls nicht.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
      2. Hallo Skynet.

        IE schreibt bloß den genannte Text "Fehler auf der Seite" in die Statusleiste, mehr macht es nicht. Leider kann ich dir nicht viel mehr sagen als diesen Fehler.

        Schon einmal einen Doppelklick darauf gemacht? ;)

        Gruß, Ashura

        --
        Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
        Try it: Become an Opera Lover in 30 days
        1. Schon einmal einen Doppelklick darauf gemacht? ;)

          Bin nicht so IE erfahren, Sorry.... :)
          Habs jetzt raus gefunden

          Danke...

  2. Hallo,

    function newsort(sort_order) {
    var option = new Array("startdate_asc", "startdate_desc", "enddate_asc", "enddate_desc", "alphabetical_asc", "alphabetical_desc");
    for(var x = 0; x <= option.length; x++) {
      if(option[x] == sort_order) { this.document.getElementById(option[x]).style.display = "block"; }
      else { this.document.getElementById(option[x]).style.display = "none"; }
    }
    }
    Das aufrufen der Funktion läuft wie folgt:
    <a href="javascript:newsort('startdate_asc')"><img src="img/arrow_asc.gif" id="img" alt="Sortierung aufsteigend" /></a>

    versuch's mal mit '<' anstelle '<='. Da 'lenght' dir die Anzahl der Arrayelemente zurückgibt, hier also 6, und Arreys bei 0 anfangen zu zählen, rufst du bei dem 6. Durchgang deiner Schleife in dem else-Zweig folgendes aus:
    ... document.getElementById(false).style ...

    Ob IE deshalb die Fehlermeldung ausgibt, kann ich dir um die Uhrzeit aber leider nicht mehr sagen. :-)

    Ciao
    Heinzelhund

    1. Hallo nochmal,

      versuch's mal mit '<' anstelle '<='. Da 'lenght' dir die Anzahl der Arrayelemente zurückgibt, hier also 6, und Arreys bei 0 anfangen zu zählen, rufst du bei dem 6. Durchgang deiner Schleife in dem else-Zweig folgendes aus:

      muss micht gerade mal selbst korrigieren. Hab gerade den selben Fehler gemacht. Ist natürlich dann der 7. Durchlauf.

      Ciao
      Heinzelhund