Si vous voulez une « grille modifiable » soit une table comme la structure qui vous permet de faire l' une des lignes d' une forme, utilisez CSS qui imite la mise en page de la balise TABLE: display:table
, display:table-row
et display:table-cell
.
Il n'est pas nécessaire d'envelopper votre table entière dans un formulaire et pas besoin de créer un formulaire et une table séparés pour chaque ligne apparente de votre table.
Essayez plutôt ceci:
<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>
Le problème avec l'encapsulation de la TABLE entière dans un FORMULAIRE est que tous les éléments du formulaire seront envoyés lors de la soumission (peut-être que cela est souhaité mais probablement pas). Cette méthode vous permet de définir un formulaire pour chaque "ligne" et d'envoyer uniquement cette ligne de données lors de la soumission.
Le problème avec enrouler une balise FORM autour d'une balise TR (ou TR autour d'un FORM) est que c'est du HTML non valide. Le FORMULAIRE permettra toujours de soumettre comme d'habitude mais à ce stade le DOM est cassé. Remarque: Essayez d'obtenir les éléments enfants de votre FORM ou TR avec JavaScript, cela peut conduire à des résultats inattendus.
Notez qu'IE7 ne prend pas en charge ces styles de table CSS et IE8 aura besoin d'une déclaration doctype pour le mettre en mode "standard": (essayez celui-ci ou quelque chose d'équivalent)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Tout autre navigateur prenant en charge display: table, display: table-row et display: table-cell doit afficher votre tableau de données css de la même manière que si vous utilisiez les balises TABLE, TR et TD. La plupart d'entre eux le font.
Notez que vous pouvez également imiter THEAD, TBODY, TFOOT en encapsulant vos groupes de lignes dans une autre DIV avec display: table-header-group
, table-row-group
et table-footer-group
respectivement.
REMARQUE: la seule chose que vous ne pouvez pas faire avec cette méthode est colspan.
Découvrez cette illustration: http://jsfiddle.net/ZRQPP/
<form>
ne peut pas être mis à l'intérieur<tr>
.