Announcement

Collapse
No announcement yet.

Zugriff auf childNodes[] für IE typisieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zugriff auf childNodes[] für IE typisieren

    Hi,

    ich habe da ein kleines Problem bei einer Webpage, die ein tabellarisches Formular dynamisch aufbaut. ImGrunde genommen wird per HTTP-Request eine Liste an Komponenten angefordert, die in einer 2-spaltigen Tabelle (id="Components", besteht im HTML-Teil nur aus dem header) angezeigt wird. Die erste Spalte ist der Name, die 2. Spalte ist eine Checkbox, die einen Status (erledigt/noch nicht erledigt) anzeigen soll.
    [highlight=JavaScript]

    function BuildTable(tableContent)
    {
    var data = tableContent;
    var pos1,pos2;
    var table = document.getElementById("Components");

    while (table.rows.length>1) table.deleteRow(1);
    var actrowindex=1;

    while (data != "")
    {
    var actrow;
    pos1=data.indexOf("|");
    if (pos1==-1) break;
    pos2=data.indexOf("|",pos1+1);
    if (pos2 == -1) pos2 = data.length;

    var actname = data.substr(0, pos1);
    var actentry ;
    if (pos2==-1)
    actentry = data.substr(pos1+1);
    else
    {
    actentry=data.substring(pos1+1, pos2);
    data = data.substr(pos2+1);
    }
    actrow = table.insertRow(actrowindex);
    actrowindex += 1;
    var TD1=document.createElement("td");
    TD1.appendChild(document.createTextNode(actname));
    var TD2=document.createElement("td");
    TD2.align="center";
    var cb = document.createElement("input");
    cb.type="checkbox";
    cb.checked=true;
    cb.disabled=true;
    TD2.appendChild(cb);
    actrow.appendChild(TD1);
    actrow.appendChild(TD2);
    }
    noComponents=actrowindex-1;
    }

    function DeleteOldResults()
    {
    //TODO: invalidate results in database
    var i;
    var table=document.getElementById("Components");
    for (i=0; i < table.rows.length; i++)
    {
    table.rows[i].cells[1].childNodes[0].checked=false;
    }
    document.getElementsByName("selectComponent")[0].disabled=false;
    document.getElementsByName("deleteResults")[0].disabled=true;
    }

    [/highlight]

    Unter Firefox klappt das ganz gut, jetzt habe ich es aber mal im IE versucht, und der sagt in der Funktion DeleteOldResults beim Unchecken "Das Objekt unterstützt diese Eigenschaft oder Methode nicht".

    Ich nehme nun an, dass der IE es nicht hinbekommt, dass cells[1].childNodes[0] eine Checkbox ist, und da der normale Node kein checked hat, kommt dieser Fehler. Muss ich da irgendwas hinzufügen, was Firefox "kulanterweise" selbst macht (z.b. childNodes[0].nodeValue.checked oder so)? Oder muss ich den Node explizit auf eine Checkbox casten (und wenn ja, wie) um die Eigenschaft setzen zu dürfen?

    Bitte nicht wundern über die (Nicht-)Bearbeitung von actentry. der soll später steuern, ob die Checkbox auch vom user angehakt werden darf (also disabled=false gesetzt werden soll). Der String der BuildTable übergeben wird sieht so aus:"Name1|0|Name2|1|Name3|0|Name4|0|..."

    Hoffe jemand kann helfen

    Gruß
    Martin

  • #2
    Hallo,
    Originally posted by M.Dietz View Post
    ...besteht im HTML-Teil nur aus dem header)
    Damit dürfte im ersten Schleifendurchlauf (da die Schleife mit 0! startet)
    table.rows[0].cells[1].childNodes[0] nicht die erwartete Checkbox sein, sondern das was in der Headerzelle steht! table.rows[0] ist die Headerzeile!
    Firefox ist bei nicht vorhandene Attributen kulanter und legt diese im Objekt einfach an, während der IE hier meckert.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Danke, jetzt klappts.

      Dass ich da die Schleife mit 0 anfange ist mir gar nicht aufgefallen. manchmal ist man halt regelrecht betriebsblind...

      Gruß
      Martin

      Comment

      Working...
      X