Internet Explorer versteht kein gültiges JavaScript

  • Ich versteh's nicht...

    FireFox 2.0.0.14: FireBug meldet - alles O.K.; Opera 9.50: Fehlerfenster bleibt leer. MSIE 7 ...

    Das Objekt "document" muss existieren. Erst recht im Kompatibilitätsmodus laut DOCTYPE (HTML 4.01 Transitional). Und das Objekt "document" hat die Funktion "getElementById(string)" - Groß-/Kleinschreibung aller Buchstaben geprüft. Was also gibt es hier auszusetzen?!

  • probier's mal mit zusaetzlicher variablendeklaration:

    Code
    var aoldiv = document.getElementById("aoldiv");
    var wwwdiv = document.getElementById("wwwdiv");
  • das 'problem' ist, dass der internet explorer aoldiv (das objekt, nicht die variable) schon dem javascript bereitstellt.
    es funktioniert also auch wenn du die zeilen ganz weglaesst.

  • Das habe ich jetzt noch mal überprüft:

    HTML
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">    <script language="JavaScript" type="text/javascript">      <!--        function hase()        {          if(igel)          {            igel.innerHTML = "Der Igel war schon da!";          }          else          {            var igel = document.getElementById("igel"); // <== lokal            if(igel)            {              igel.innerHTML = "Der Hase lief schneller.";            }            else            {              document.write("<p>Wo ist der Igel?</p>");            }          }        }      // -->    </script>    </head>  <body onload="hase()">    <p id="igel">Hier l&auml;uft nichts.</p>  </body></html>

    Nach deiner Aussage müsste der Internet Explorer also anzeigen:

    Zitat

    Der Igel war schon da!

    Aber bei mir erscheint trotzdem:

    Zitat

    Der Hase lief schneller.

    Wer's ausprobieren will: http://www.ligh.de/hase-igel_lokal.html

    Wird doch nicht etwa davon abhängen, bei welcher Art von Ereignis (laden oder klicken) das passiert? -- Ich teste weiter...
    __

    Jetzt wird's wirklich märchenhaft:

    In der "lokalen" Variante zeigen alle Browser an, dass der Hase schneller war. Also noch mal die globale Variante:

    http://www.ligh.de/hase-igel_global.html

    Jetzt sind sich alle Browser einig: Der Igel war schon da!

    Das bedeutet: Eine globale Variable wird bereits erzeugt, bevor eine Skriptfunktion ausgeführt wird -- aber weil sie global deklariert wurde, nicht weil ein HTML-Tag mit ID existiert.

    Erklären kann man das wohl dadurch: Damit eine globale Variable auch wirklich global = überall verfügbar ist, muss sie bereits beim Laden des Dokumentes existieren, noch bevor die erste Skriptfunktion per Eventhandler ausgeführt wird. Lokale Variablen dagegen existieren erst, wenn die Funktion, in der sie deklariert werden, auch ausgeführt wird. Das mögen in "body.onLoad()" eventuell nur Mikrosekunden sein. Aber es beweist, dass JavaScript erst nach global zu deklarierenden Variablen sucht, bevor es die Ereignisverwaltung startet.

  • ich muss sagen, mir ist das nicht wirklich klar. wenn du beim lokalen beispiel folgendes auskommentierst, wirkt sich das extrem aus (finde ich unlogisch).

  • Beachte vor allem:

    Code
    if(igel)
              {
                igel.innerHTML = "Der Igel war schon da!";
              }

    ohne weitere Prüfung, ob "igel" denn überhaupt ein Objekt ist, das die Eigenschaft "innerHTML" hat! Aber auch bei FireFox und Opera läuft dieser Bereich anstandslos.
    __

    Tja, dass ohne Alternativzweig ein Objekt anscheinend doch existiert, ist wahrlich schwer zu verstehen. Und das funktioniert auch in allen Browsern. Paradoxerweise?

    So langsam sollten wir wohl mal echte Experten darauf aufmerksam machen.

  • Zitat

    ohne weitere Prüfung, ob "igel" denn überhaupt ein Objekt ist, das die Eigenschaft "innerHTML" hat!


    Lange nicht mehr JavaSkript benutzt, aber sollte in dem Fall nicht automatisch an das igel-Object ein Feld gepackt werden mit entsprechendem Namen?

  • Mit diesem seltsamen Effekt musste ich mich vor 4 Monaten auch rumschlagen. Hat eine Weile gedauert, bis ich drauf gekommen bin...

    Du meinst, im MSIE sind Tags mit "id"-Attribut automatisch als Objektvariablen verfügbar, deren Namen dem Wert des "id"-Attributes entspricht?
    Also durch die Deklaration
    <div id="aoldiv" ... >
    existiert ein Objekt "aoldiv" als globale Variable?


    Mein Problem war, dass dieser Effekt das Verwenden lokaler Variablen verhindert hat. Die Variable existiert dann zwar, hat aber noch lange keinen Wert (schon garnicht den des innerHTML), was zu verwirrendem Verhalten führte.
    Wenn man weiß wonach man suchen soll, merkt man, dass man nicht der einzige ist...
    http://praegnanz.de/weblog/id-attr…-gleichen-scope
    bei quirksmode.org habe ich auch mal was gefunden, weiß nur nicht mehr wo...

    Zap

    "Wer grundlegende Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu gewinnen, verdient weder Freiheit noch Sicherheit."
    Benjamin Franklin

    mein Rechenknecht

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!