Hallo,
//Leider musste ich feststellen, dass bei 'document.write', wenn dies innerhalb einer Funktion steht, anscheinend die gesamte Seite neu geladen wird.
Stimmt nicht ganz. Wenn diese Funktion noch während des Ladevorganges ausgeführt wird, gibt es das Problem nicht.
Dabei soll aber einfach an der stelle wo 'document.write' steht der code eingefügt werden. Wenn möglich soll immer wenn der User auf "Add Row" klickt eine Reihe hinzugefügt werden bzw. bei einem "Del Row" eine reihe gelöscht werden. Hat Dazu jemand eine konstruktive Idee?
Zum Erzeugen neuer Elemente, kannst du generell die Methoden des http://de.selfhtml.org/javascript/objekte/node.htm@title=node-, sowie des document-Objektes einsetzen (appendChild(), createElement(), …). Alternativ dazu gibt es für http://de.selfhtml.org/javascript/objekte/htmlelemente.htm#table@title=Tabellen außerdem noch vereinfachte Methoden wie insertRow() und deleteRow(). Wenn du die http://de.selfhtml.org/javascript/objekte/htmlelemente.htm#tr@title=Tabellenzeilen erzeugt hast, musst du noch die Tabellenzellen einfügen. Wie du auf der eben verlinkten Seite sieht, gibt es auch hierfür wieder spezielle Methoden wie insertCell() und deleteCell().
Damit hättest du also schonmal eine Tabellenzelle erzeugt. Um diese nun mit Text zu füllen, kannst du mit der Methode document.createTextNode() einen Textknoten erzeugen und diesen per appendChild() einhängen.
Hier mal ein Beispiel, wie das aussehen könnte:
<script type="text/javascript">
function addrow(Obj,Text){
//Tabelle finden
while (Obj.nodeName.toLowerCase() != "table")
Obj = Obj.parentNode;
alert(Obj.nodeName);
Obj.insertRow(Obj.rows.length).insertCell(0).appendChild(document.createTextNode(Text));
}
</script>
…
<table>
<tr>
<td>Name: </td>
<td><input type="text" name="newText" /></td>
<td><input type="button" onclick="addrow(this,this.parentNode.getElementsByName('newText')[0].value)" value="Add Row" /></td>
</tr>
</table>
Allerdings ist das mit der Tabelle schon ziemlich umständlich. Möchtest du nicht lieber etwas listenartiges verwenden? Das wäre semantischer und zudem auch noch einfacher umzusetzen.
mfg. Daniel