У меня есть набор элементов, которые могут быть в разных состояниях. Я хочу, чтобы позволить пользователю использовать (X) HTML-формы дляТабличные (X) HTML-формы
- изменения состояния, и
- легко просматривать состояние группы объектов
... так это конце концов, я хотел бы макет как:
| item1 | radio button for state 1 | radio for state 2 | ... | [update button] |
| item2 | radio button for state 1 | radio for state 2 | ... | [update button] |
и т.д. Я предпочитаю радиокнопки список коробки так, что это легко для пользователя, чтобы визуально сканировать для вещей в определенном состоянии.
Мне показалось, что это абсолютно табличные данные. Единственная проблема заключается в том, что вы не можете иметь формы внутри таблицы, которая пересекает ячейки таблицы (то есть <tr> <form> <td> ...
недействительна).
Я подумал: «Эй, у меня могла бы быть одна гигантская форма, обертывающая таблицу, и чтобы значение [кнопка обновления] содержало идентификаторы для каждой строки!» Оказывается, некоторые версии IE посылают ВСЕ КНОПКИ ЗАПИСИ КНОПКИ в любой форме.
Поэтому я подумал, что, возможно, выложить его с помощью <div>
и разместить формы внутри одного <td>
. Но затем они разрывают линию на каждом <div>
. Поэтому я установил их ширину и сделал их float: left
. Но затем они обертываются внутри ячеек таблицы, если строка таблицы шире, чем страница, и радиоуправляемые элементы не совпадают с заголовками.
Можно ли сформулировать это как я намерен? XHTML ниже показывает предполагаемую структуру. Соблюдайте, что произойдет, если вы измените размер окна браузера под шириной таблицы (в идеале, имя сломается, или в таблице появится полоса прокрутки).
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head><title>Test</title>
<style type="text/css">
.state-select, .thing-state-name, .update {
float: left;
width: 8em;
}
.state-select {
text-align: center;
}
</style>
</head>
<body>
<table>
<thead>
<tr>
<th class="thing-name-header">Thing</th>
<th>
<div class="thing-state-name">Present</div>
<div class="thing-state-name">Absent</div>
<div class="thing-state-name">Haven't looked</div>
</th>
</tr>
</thead>
<tbody>
<tr>
<td>Apple</td>
<td>
<form action="something" method="post">
<input type="hidden" name="id" value="1" />
<div class="state-select"><input type="radio" name="presence" value="present" checked="checked" /></div>
<div class="state-select"><input type="radio" name="presence" value="absent" /></div>
<div class="state-select"><input type="radio" name="presence" value="unknown" /></div>
<div class="update"><input type="submit" value="Update" /></div>
</form>
</td></tr>
<tr>
<td>Orange</td>
<td>
<form action="something" method="post">
<input type="hidden" name="id" value="2" />
<div class="state-select"><input type="radio" name="presence" value="present" /></div>
<div class="state-select"><input type="radio" name="presence" value="absent" checked="checked" /></div>
<div class="state-select"><input type="radio" name="presence" value="unknown" /></div>
<div class="update"><input type="submit" value="Update" /></div>
</form>
</td></tr>
<tr>
<td>David Bowie</td>
<td>
<form action="something" method="post">
<input type="hidden" name="id" value="3" />
<div class="state-select"><input type="radio" name="presence" value="present" /></div>
<div class="state-select"><input type="radio" name="presence" value="absent" /></div>
<div class="state-select"><input type="radio" name="presence" value="unknown" checked="checked" /></div>
<div class="update"><input type="submit" value="Update" /></div>
</form>
</td></tr>
</tbody>
</table>
</body>
</html>
Интересный подход, но если есть скажем, 20 пунктов на страницу, и один обновляется, сервер должен обрабатывать в 20 раз больше неизменных данных. Тем не менее, несколько обновлений могут быть полезными. (Кроме того, это червь CherryPy + Cheetah templating, поэтому нет PHP, но возможно тем не менее.) – detly
Мячи, я понятия не имею, почему я предположил, что это PHP. – Sam152
Извините, я почти забыл это принять. Этот подход лучше всего работает с несколькими клиентскими JS и AJAX, чтобы предотвратить перегрузку сервера.В конце концов, я все равно использовал список, но это помогло выяснить, что было разумным или нет. – detly