Se si desidera una "griglia modificabile", ovvero una struttura simile a una tabella che consente di trasformare una delle righe in un modulo, utilizzare CSS che imita il layout del tag TABLE: display:table
, display:table-row
, e display:table-cell
.
Non è necessario racchiudere l'intera tabella in un modulo e non è necessario creare un modulo e una tabella separati per ogni riga apparente della tabella.
Prova questo invece:
<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>
Il problema con il wrapping dell'intera TABELLA in un FORM è che tutti gli elementi del modulo verranno inviati al momento dell'invio (forse è desiderato ma probabilmente no). Questo metodo consente di definire un modulo per ogni "riga" e inviare solo quella riga di dati al momento dell'invio.
Il problema con il wrapping di un tag FORM attorno a un tag TR (o TR attorno a un FORM) è che è HTML non valido. Il FORM consentirà comunque l'invio come al solito, ma a questo punto il DOM è rotto. Nota: prova a ottenere gli elementi figlio del tuo FORM o TR con JavaScript, può portare a risultati imprevisti.
Nota che IE7 non supporta questi stili di tabella CSS e IE8 avrà bisogno di una dichiarazione doctype per metterlo in modalità "standard": (prova questo o qualcosa di equivalente)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Qualsiasi altro browser che supporti display: table, display: table-row e display: table-cell dovrebbe mostrare la tua tabella di dati CSS allo stesso modo che se utilizzassi i tag TABLE, TR e TD. Molti di loro lo fanno.
Si noti che è possibile anche THEAD mimica, TBODY, TFOOT avvolgendo i gruppi di righe in un altro DIV con display: table-header-group
, table-row-group
e table-footer-group
, rispettivamente.
NOTA: l'unica cosa che non puoi fare con questo metodo è colspan.
Dai un'occhiata a questa illustrazione: http://jsfiddle.net/ZRQPP/
<form>
non può essere messo dentro<tr>
.