Dirk: IE macht's nicht so wie der Firefox

Hallo.

Ich habe das Problem, dass der IE gewisse "DOM-Aktionen" nicht durchführt und dafür einen JS Fehler meldet (Error: Not implemented). Firefox machts ohne zu murren. Was muss ich tun, damit es auch im IE läuft?

Ich habe eine Tabelle, die je nach desetztem Attribut ein Label zu dieser Tabelle setzt und zwar an Position top, left, bottom oder right. Je nachdem, was angegeben ist, wird eine neue <tr> bzw. <td> usw. geschrieben.

Soz. "in der Mitte" soll dann eine Matrix aus INPUT-Elementen platziert werden (Eine "innere" Tabelle, die in einer TD der zuvor erstellten Tabelle eingefügt wird. Dieses Einfgen soll per Javascript rfolgen. Dazu habe ich direkt nach dem HTML-Code für die Tabelle/INPUT-Elemente, welche in ein DIV gebettet sind, folgendes JavaScript geschrieben:

<c:if test="${empty moveLabelToId or not empty fn:toLowerCase(labelPosition)}">
 <script type="text/javascript">
  /* move field matrix table */
  child = document.getElementById('${id}');
alert("${id}" + " child = " + child.nodeValue);
  parent = document.getElementById('_fieldMatrixPlaceholder');
  parent.replaceChild(child, parent.firstChild);
 </script>

Lasse ich mir child ausgeben: alert("Child = " + child.nodeName);
erhalte ich "Child = DIV.

Lasse ich mir ausgeben: alert("Child value = " + child.nodeValue);
erhalte ich: Child value = null.

Es handelt sich übrgiens um ein TagFile, welches in einer JSP eingesetzt wird, aber ich denke, dass ist hier nebensächlich.

Vielen Dank
Dirk

  1. Hallo,

    <script type="text/javascript">
      /* move field matrix table */
      child = document.getElementById('${id}');
    alert("${id}" + " child = " + child.nodeValue);
      parent = document.getElementById('_fieldMatrixPlaceholder');

    [1](http://de.selfhtml.org/javascript/objekte/frames.htm#allgemeines) ist ein sehr schlechter Name für ein benutzerdefiniertes JavaScript-Objekt. Du versuchst hier dem parent-Window ein Node-Objekt zuzuweisen.

    parent.replaceChild(child, parent.firstChild);
    </script>

    Ersetze den Bezeichner "parent" durch einen anderen.

    Lasse ich mir ausgeben: alert("Child value = " + child.nodeValue);
    erhalte ich: Child value = null.

    Das ist normal. Ein DIV ist ein Element-Node. Deren nodeValue ist null.

    viele Grüße

    Axel


    1. parent ↩︎

    1. Vielen Dank, Axel,

      aber am "parent" liegt es nicht.
      Ich habe herausgefunden, dass der IE bei document.getElementById() null zurück liefert. Ich weiss nur nicht wieso!
      Ich habe testweise mal in der äusseren Tabelle ein ID-Attribut vergeben und im später aufgerufenen JS genau diese ID versucht zu bekommen (document.getElementById("icke")... und genau da knallt der IE einfach weg. Er verlässt einfach das Script und macht fröhlich mit dem folgenden Code weiter.

      Gruß
      Dirk

      Hallo,

      <script type="text/javascript">
        /* move field matrix table */
        child = document.getElementById('${id}');
      alert("${id}" + " child = " + child.nodeValue);
        parent = document.getElementById('_fieldMatrixPlaceholder');
           [1](http://de.selfhtml.org/javascript/objekte/frames.htm#allgemeines) ist ein sehr schlechter Name für ein benutzerdefiniertes JavaScript-Objekt. Du versuchst hier dem parent-Window ein Node-Objekt zuzuweisen.
        parent.replaceChild(child, parent.firstChild);
      </script>

      Ersetze den Bezeichner "parent" durch einen anderen.

      Lasse ich mir ausgeben: alert("Child value = " + child.nodeValue);
      erhalte ich: Child value = null.
      Das ist normal. Ein DIV ist ein Element-Node. Deren nodeValue ist null.

      viele Grüße

      Axel


      1. parent ↩︎

      1. Hallo,

        aber am "parent" liegt es nicht.

        Der IE kann _definitiv_ einer globalen Variable parent keinen Wert zuweisen. Wenn Du also "parent" als globalen Variablennamen verwendest, bekommst Du _definitiv_ Probleme mit dem IE.

        Ich habe herausgefunden, dass der IE bei document.getElementById() null zurück liefert. Ich weiss nur nicht wieso!

        Meist, weil es das Element zu diesem Zeitpunkt noch gar nicht gibt, sprich es noch gar nicht gerendert ist.

        Ich habe testweise mal in der äusseren Tabelle ein ID-Attribut vergeben und im später aufgerufenen JS genau diese ID versucht zu bekommen (document.getElementById("icke")... und genau da knallt der IE einfach weg. Er verlässt einfach das Script und macht fröhlich mit dem folgenden Code weiter.

        Das kann ich mangels Code nicht nachvollziehen.

        viele Grüße

        Axel

        1. ...so viel Zeilen darf ich hier nicht posten (kommt 'ne Fehlermeldung). Darf ich's dir mal zmailen?

          Gruß
          Dirk

          Ich habe testweise mal in der äusseren Tabelle ein ID-Attribut vergeben und im später aufgerufenen JS genau diese ID versucht zu bekommen (document.getElementById("icke")... und genau da knallt der IE einfach weg. Er verlässt einfach das Script und macht fröhlich mit dem folgenden Code weiter.
          Das kann ich mangels Code nicht nachvollziehen.

          viele Grüße

          Axel

          1. Hallo,

            ...so viel Zeilen darf ich hier nicht posten (kommt 'ne Fehlermeldung).

            Erstelle ein einfaches Beispiel nur mit HTML und JavaScript und stelle es irgendwo auf kostenlosem Webspace online zur Verfügung. Meist erledigt sich das Problem dabei von selbst, weil Du den Fehler selbst findest.

            Darf ich's dir mal zmailen?

            Nein. Erstens ist das hier kein persönlicher Support und zweitens werde ich mir nicht extra deswegen einen Tomcat installieren. Wenn Du ein pure HTML/JavaScript Beispiel hättest, könntest Du es ja irgendwohin hochladen.

            viele Grüße

            Axel