Se você quer um "grid editável", isto é uma tabela como a estrutura que permite que você faça qualquer uma das linhas de um formulário, use CSS que imita o layout da marca TABLE: display:table
, display:table-row
, e display:table-cell
.
Não é necessário agrupar toda a tabela em um formulário e criar um formulário e tabela separados para cada linha aparente da tabela.
Tente isso:
<style>
DIV.table
{
display:table;
}
FORM.tr, DIV.tr
{
display:table-row;
}
SPAN.td
{
display:table-cell;
}
</style>
...
<div class="table">
<form class="tr" method="post" action="blah.html">
<span class="td"><input type="text"/></span>
<span class="td"><input type="text"/></span>
</form>
<div class="tr">
<span class="td">(cell data)</span>
<span class="td">(cell data)</span>
</div>
...
</div>
O problema de agrupar toda a tabela em um formulário é que todos e quaisquer elementos do formulário serão enviados no envio (talvez isso seja desejado, mas provavelmente não). Este método permite definir um formulário para cada "linha" e enviar apenas essa linha de dados no envio.
O problema de agrupar uma marca FORM em torno de uma marca TR (ou TR em torno de um FORM) é que ele é HTML inválido. O FORM ainda permitirá o envio como de costume, mas neste momento o DOM está quebrado. Nota: Tente obter os elementos filhos do seu FORM ou TR com JavaScript, pois isso pode levar a resultados inesperados.
Observe que o IE7 não suporta esses estilos de tabela CSS e o IE8 precisará de uma declaração de tipo de documento para colocá-la no modo "padrões": (tente este ou algo equivalente)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Qualquer outro navegador que suporte display: table, display: table-row e display: table-cell deve exibir sua tabela de dados css da mesma forma que faria se você estivesse usando as tags TABLE, TR e TD. A maioria deles faz.
Observe que você também pode imitar THEAD, TBODY, TFOOT envolvendo seus grupos de linhas em outro DIV com display: table-header-group
, table-row-group
e table-footer-group
respectivamente.
NOTA: A única coisa que você não pode fazer com esse método é colspan.
Confira esta ilustração: http://jsfiddle.net/ZRQPP/
<form>
não pode ser colocado dentro<tr>
.