Si desea una "rejilla editable", es decir una tabla como la estructura que le permite realizar cualquiera de las filas una forma, el uso de CSS que imita el diseño de la etiqueta TABLE: display:table
, display:table-row
, y display:table-cell
.
No es necesario ajustar toda la tabla en un formulario ni crear un formulario y una tabla separados para cada fila aparente de la tabla.
Intenta esto en su lugar:
<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>
El problema con envolver toda la TABLA en un FORMULARIO es que todos y cada uno de los elementos del formulario se enviarán al enviar (tal vez eso sea lo deseado, pero probablemente no). Este método le permite definir un formulario para cada "fila" y enviar solo esa fila de datos al enviar.
El problema con envolver una etiqueta FORM alrededor de una etiqueta TR (o TR alrededor de un FORM) es que es HTML no válido. El FORMULARIO todavía permitirá enviar como de costumbre, pero en este punto el DOM está roto. Nota: Intente obtener los elementos secundarios de su FORM o TR con JavaScript, puede generar resultados inesperados.
Tenga en cuenta que IE7 no es compatible con estos estilos de tabla CSS y IE8 necesitará una declaración doctype para ponerlo en modo "estándar": (pruebe con este o algo equivalente)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Cualquier otro navegador que admita display: table, display: table-row y display: table-cell debería mostrar su tabla de datos css de la misma manera que si estuviera usando las etiquetas TABLE, TR y TD. La mayoría de ellos lo hacen.
Tenga en cuenta que también puede imitar THEAD, TBODY, TFOOT envolviendo sus grupos de filas en otro DIV con display: table-header-group
, table-row-group
y table-footer-group
respectivamente.
NOTA: Lo único que no puede hacer con este método es colspan.
Vea esta ilustración: http://jsfiddle.net/ZRQPP/
<form>
No se puede poner dentro<tr>
.