Nếu bạn muốn có một "lưới có thể chỉnh sửa" tức là một bảng như cấu trúc cho phép bạn thực hiện bất kỳ hàng một hình thức, việc sử dụng CSS mà bắt chước TABLE thẻ của bố trí: display:table
, display:table-row
, và display:table-cell
.
Không cần phải bọc toàn bộ bảng của bạn trong một biểu mẫu và không cần phải tạo một biểu mẫu và bảng riêng biệt cho mỗi hàng rõ ràng của bảng của bạn.
Hãy thử điều này thay thế:
<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>
Vấn đề với việc gói toàn bộ BẢNG trong MẪU là bất kỳ và tất cả các yếu tố biểu mẫu sẽ được gửi khi gửi (có thể đó là mong muốn nhưng có thể không). Phương pháp này cho phép bạn xác định một biểu mẫu cho mỗi "hàng" và chỉ gửi hàng dữ liệu đó khi gửi.
Vấn đề với việc bọc thẻ FORM xung quanh thẻ TR (hoặc TR quanh FORM) là HTML không hợp lệ. MẪU vẫn sẽ cho phép gửi như bình thường nhưng tại thời điểm này, DOM bị hỏng. Lưu ý: Hãy thử lấy các phần tử con của FORM hoặc TR của bạn bằng JavaScript, nó có thể dẫn đến kết quả không mong muốn.
Lưu ý rằng IE7 không hỗ trợ các kiểu bảng CSS này và IE8 sẽ cần một khai báo kiểu tài liệu để đưa nó vào chế độ "tiêu chuẩn": (thử kiểu này hoặc một cái gì đó tương đương)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Bất kỳ trình duyệt nào khác hỗ trợ hiển thị: bảng, hiển thị: hàng bảng và hiển thị: ô bảng sẽ hiển thị bảng dữ liệu css của bạn giống như khi bạn sử dụng các thẻ TABLE, TR và TD. Hầu hết họ làm.
Lưu ý rằng bạn có thể thead cũng bắt chước, tbody, TFOOT bằng cách gói nhóm hàng của bạn trong một DIV với display: table-header-group
, table-row-group
và table-footer-group
tương ứng.
LƯU Ý: Điều duy nhất bạn không thể làm với phương pháp này là colspan.
Kiểm tra hình minh họa này: http://jsfiddle.net/ZRQPP/
<form>
không thể được đặt bên trong<tr>
.