以下是管理页面的相当典型的布局(例如,在数据库中搜索并对结果执行某些操作):
- 动作下拉列表
- 包含列名称的表标题行
- 第二个表标题行,其中包含列的搜索过滤器
- 带有复选框的结果行
- 搜索按钮
用户可以设置各种过滤器,搜索,使用复选框选择一些结果,然后从下拉列表中选择一个操作,操作和选定的行ID将提交给某些处理脚本。
对这种控制有一些基本的期望:
- GET for search,POST for actions
- 使用HTML表格的自动调整大小功能,以便列可以根据内容缩小或缩小
- 合理跨浏览器
我一直在寻找一种很好的技术来实现这一目标,但我能想到的一切似乎都有严重的缺点:
- 最简单的就是有两种形式(搜索控件的GET表单和复选框的POST),但是HTML4 DTD使得这不可能:我可以将整个表包装在一个表单中,也可以将单独的表单放在里面每个表格单元格(这都是无用的)。
- 或者,我可以为每一行使用不同的表元素,并将它们自由地分组到表单中,但是然后列宽度将不匹配,我将不得不设置固定宽度。 (CSS3
table-*
显示类型缺乏足够的支持。)
- HTML5允许我们将输入元素放在表单之外,并使用
form
属性将它们连接起来,但这种支持更少。
- 有一个丑陋的黑客涉及无效的HTML,表单直接包装
tr
元素,这似乎有用,但会弄乱DOM,混淆Javascript库,并不完全是未来安全。
- 我可以将整个表包装在一个表单中,并根据按下的按钮动态更改其方法和操作,但这使我依赖于Javascript;另外,我不想在POST请求中提交搜索控件,反之亦然,这是不必要的流量。此外,当存在大量结果行时,由于所有复选框,搜索请求可能会超过URL大小限制(IE中只有几千个字符)。
- 我可以这样做,但在用户提交表单时禁用不必要的字段。除了对这样一个简单的任务过于复杂之外,当请求以某种方式停止时(例如用户按下ESC)并且如果禁用了表单字段,用户会留下一堆,这会产生各种可用性问题。
我不知道有更好的解决方案吗?