• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

[JavaScript] Reihenfolge beim ausführen von document.write

Alecco

Transparent von Croncels
Registriert
17.02.09
Beiträge
306
Hi,

ich wundere mich grade über folgendes: Ich erzeuge mit einer Schleife und einem Array Eingabefelder. Das klappt auch alles. Jetzt möchte ich das gerne in eine Tabelle schreiben. Komisch ist, dass die Tabelle nicht erzeugt wird.

Dazu folgender Ausschnitt aus meinem Code:

Code:
...
document.write("<table id='1' width='' border='1' cellspacing='1'>");    
    for(i=0; i<feingabe.length; i++){
        document.write("<tr>");
        document.write("<td><strong><font class='sd'>"+ feingabe[i] +"</font></strong></td>");
        document.write("<td><input type='text' name="+ feingabe[i] +"size='35' style='background-color:#FFFCF2; border:1px solid; border-color:#AAAAAA; font-size:8pt; width:250px' value=''></td>");
        document.write("</tr>");
    }    
    document.write("</table>");

Jetzt passiert folgendes:
Anstatt das er etwas macht wie...
Code:
<table...>
...
</table>

macht er:

Code:
<table...></table>
...

Woher kommt das?
 

knalli

Stechapfel
Registriert
19.01.10
Beiträge
159
Laut Schleife sollte das zwar gehen.. aber du solltest, ganz im Ernst, von document.write Abstand nehmen. Abgesehen vom Laufzeitverhalten ist das unschön.

Sagen wir, du willst in einem DIV (sagen wir, <div id="meindiv">..) eine Tabelle wie oben einfügen, und willst dafür ernsthaft kein Hilfsmittel wie jQuery nutzen:

Code:
var target = document.getElementById('meindiv'); // unchecked if exists

var table = document.createElement('table');
table.id = 1;
table.border = 1;
table.cellspacing = 1;

for (var i = 0; i < feingabe.length; i++) {
  var text = feingabe[i];
  var tr = document.createElement('tr');
  var td1 = document.createElement('td');
  var td2 = document.createElement('td');
  var input = document.createElement('input');

  td1.innerHTML = text; // oder td1.appendChild(document.createTextNode(text));
  
  input.type = 'text';
  input.name = text;
  input.size = 35;
  input.style.backgroundColor = '#ffcf2'; // usw.
  td2.appendChild(input);
 

  tr.appendChild(td1);
  tr.appendChild(td2);
  table.appendChild(tr);
}

target.appendChild(table);


Das ist echte DOM-Manipulation auf den Baum und hat auf jeden Fall den gewünschten Effekt. Da da allerdings viel Boilercode ist, würde ich ein Framework wie jQuery empfehlen. Einfach mal angucken, jquery.com. Angenehm, leicht, kurz, klein und schnell.
 

Alecco

Transparent von Croncels
Registriert
17.02.09
Beiträge
306
Ok ich habe alles umgeändert und es funktioniert.

Aber: Wie kann ich jetzt z.B. bei einem erzeugtem "radio" überprüfen, ob dieser angeklickt worden ist?