Manfred: <table> Modifikation in Firefox 3.6

Beitrag lesen

Interessanter Effekt bei Firefox 3.6

Ich hab nun Firefox 3.6.2 installiert und mit Hilfe des Firebug einen interessanten Effekt gefunden.
Ein Feature meiner GPS-Webseite hat nicht mehr funkioniert, nämlich dass bei einem Klick auf einen File-Selection Button mit

<input type="file" ... onclick="add_line(...)">

nur die "add_line(...)" JavaScript-Funktion ausgeführt wird, die Datei-Auswahl Dialog-Box aber nicht aufgeht!
Die "add_line(...)" JavaScript-Funktion fügt eine weitere Eingabezeile für Dateien <input type="file" ...> hinzu, so dass weitere Dateien zum Hochladen ausgewählt werden können.
Diese Eingabezeilen stehen in einer Tabelle, so dass die Funktion "add_line(...)" jedesmal nicht nur eine Eingabezeile, sondern auch eine Zeile in der entsprechenden Tabelle hinzufügt, in der die genannte Eingabezeile dann steht.
Die Tabelle war als

<table id="upload">  
  <tr>  
    <td>  
      <input type="file" ...>  
    </td>  
  </tr>  
</table>

definiert.

Selfhtml sagt, das <tbody> kann man weglassen, wenn es nur einen body gibt.
Dementsprechend habe ich mit

document.getElementById("upload").appendChild(...<tr>-Element...);

ein vorher erzeugtes <tr>-Element, das wiederum <td> und <input...> enthält, hinzugefügt.

Das hat der Firefox 3.6.2 aber nicht mehr geschluckt, eine Fehlermeldung war der Fehlerkonsole nicht zu entlocken... :-(

Untersucht man die <table> mit dem Firebug, blendet der immer (auch wenn's nicht definiert wurde) das <tbody>-Element zwischen <table> und <tr> ein. Hab' mir nie etwas dabei gedacht, aber wenn ich dann mit JavaScript wie oben beschrieben zusätzliche Zeilen einfüge, zeigt der Firebug folgendes Konstrukt an:

<table id="upload">  
  <tbody>  
    <tr>  
      <td>  
        <input type="file" ...>  (Erste Zeile, in html implementiert)  
      </td>  
    </tr>  
  </tbody>  
  <tr>  
    <td>  
      <input type="file" ...>  (Zweite Zeile, aus JavaScript eingefügt)  
    </td>  
  </tr>  
</table>  

Die erste Zeile steckt in einem <tbody>, die zweite Zeile direkt unterhalb von <table>, daran verschluckt sich der Firefox natürlich.
Seltsam nur, dass er die Funktion ausführt, die neue Zeile auch anzeigt, aber keinen Datei-Dialog mehr öffnet...  :-(

Die Lösung besteht nun darin, die Tabelle von vorneherein sauber mit <tbody> zu definieren (auch wenn's nicht vorgeschrieben ist) und die neue Zeile unterhalb von <tbody> einzufügen:

document.getElementById("upload").firstChild.nextSibling.appendChild(...<tr>-Element...);

Bin mal gespannt, ob das im Firefox irgendwann gefixt wird...