Так. Проблема была в том, что мы, как обычно, забыли про tbody, а между тем все строки - его "дети", а не tablа.
Однако есть ещё одна проблема. Стандарты W3C запрещают formе быть дочкой tbody (как для XHTML 1.0 Strict, так и для HTML 4.01 Transitional). Соответственно, браузеры пересчитывают этот "некорректный код" - смотри, например, вложенный рисунок, - это вывод Opera Dragonity для вот такого документа:
CODE:<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=windows-1251">
<title>Формы в таблице</title>
<style type="text/css">
<!--
input
{
width: 100%;
}
//-->
</style>
<script type="text/javascript">
<!--
function addForm()
{
var form = document.createElement('form');
form.action = '';
form.method = 'post';
var tr = document.createElement('tr');
var th = document.createElement('th');
th.width = '50%';
th.appendChild(document.createTextNode('Имя любимого робота'));
var td = document.createElement('td');
td.width = '50%';
var input = document.createElement('input');
input.type = 'text';
input.name = 'robotName';
td.appendChild(input);
tr.appendChild(th);
tr.appendChild(td);
form.appendChild(tr);
tr = document.createElement('tr');
th = document.createElement('th');
th.width = '50%';
th.appendChild(document.createTextNode('Сколько лет Вы проспали за всю жизнь'));
td = document.createElement('td');
td.width = '50%';
input = document.createElement('input');
input.type = 'text';
input.name = 'sleepTotal';
td.appendChild(input);
tr.appendChild(th);
tr.appendChild(td);
form.appendChild(tr);
var lastTR = document.getElementById('buttonTR');
alert(lastTR.previousSibling.tagName);
lastTR.parentNode.insertBefore(form, lastTR);
}
//-->
</script>
</head>
<body>
<table width="100%" border="1">
<form action="" method="POST">
<tr>
<th width="50%">Имя</th>
<td width="50%"><input type="text" name="name"></td>
</tr>
<tr>
<th width="50%">Ник</th>
<td width="50%"><input type="text" name="nick"></td>
</tr>
</form>
<form action="" method="POST">
<tr>
<th width="50%">Вероисповедание</th>
<td width="50%"><input type="text" name="religion"></td>
</tr>
<tr>
<th width="50%">Объём тела, м<sup>3</sup></th>
<td width="50%"><input type="text" name="body"></td>
</tr>
</form>
<tr id="buttonTR">
<th colspan="2"><input type="button" value="Добавить ещё форму" onClick="addForm()"></th>
</tr>
</table>
</body>
</html>
Сам документ, кстати, работает, но из-за этой проблемы со стандартом - не так, как должен.