Ниже приведен довольно типичный макет страниц администратора (например, поиск в базе данных и что-то с результатами):
- действие выпадающее
- строка заголовка таблицы с именами столбцов
- вторая строка заголовка таблицы с фильтрами поиска по столбцам
- Строка результата с флажком
- кнопка поиска
Пользователь может установить все виды фильтров, выполнить поиск, выбрать некоторые из результатов с помощью флажков, затем выбрать действие из раскрывающегося списка, и действие и идентификаторы выбранной строки будут отправлены в некоторый сценарий обработки.
Существуют некоторые основные ожидания для такого контроля:
- GET для поисков, POST для действий
- использовать функции автоматического изменения размера таблиц HTML, чтобы столбцы могли быть узкими или широкими в зависимости от содержимого
- достаточно кроссбраузерный
Я искал хорошую технику для достижения этой цели, но все, что я могу придумать, имеет серьезные недостатки:
- простейшим было бы иметь две формы (форму GET для элементов управления поиском и POST для флажков), но HTML4 DTD делает это невозможным: я могу либо обернуть всю таблицу в одну форму, либо поместить отдельные формы внутри каждая ячейка таблицы (что довольно бесполезно).
- альтернативно, я мог бы использовать разные элементы таблицы для каждой строки и свободно группировать их в формы, но тогда ширина столбцов не совпадет, и мне придется установить фиксированную ширину. (Типы отображения CSS3
table-*
не имеют адекватной поддержки.)
- HTML5 позволяет нам размещать элементы ввода вне форм и связывать их с атрибутом
form
, но это имеет еще меньшую поддержку.
- Существует отвратительный хак с использованием неверного HTML с формами, непосредственно обертывающими элементы
tr
, который, кажется, работает, но портит DOM, сбивает с толку библиотеки Javascript и не совсем безопасен для будущего.
- Я могу обернуть всю таблицу в одну форму и динамически изменять ее метод и действие в зависимости от того, какая кнопка была нажата, но это делает меня зависимым от Javascript; Кроме того, я не хочу отправлять элементы управления поиском в запросе POST, и наоборот, это ненужный трафик. Кроме того, при наличии большого количества строк результатов поисковый запрос может превышать ограничения размера URL (всего несколько тысяч символов в IE) из-за всех флажков.
- Я мог бы сделать то же самое, но отключить ненужные поля, когда пользователь отправляет форму. Помимо того, что он слишком сложен для такой простой задачи, у него есть различные проблемы с удобством использования, когда запрос каким-то образом остановлен (например, пользователь нажимает ESC), и у пользователя остается куча, если отключены поля формы.
Есть ли лучшее решение, о котором я не знаю?