同一个表中的GET和POST字段

时间:2011-07-27 17:29:45

标签: html html-form html-table

以下是管理页面的相当典型的布局(例如,在数据库中搜索并对结果执行某些操作):

  • 动作下拉列表
  • 包含列名称的表标题行
  • 第二个表标题行,其中包含列的搜索过滤器
  • 带有复选框的结果行
  • 搜索按钮

用户可以设置各种过滤器,搜索,使用复选框选择一些结果,然后从下拉列表中选择一个操作,操作和选定的行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)并且如果禁用了表单字段,用户会留下一堆,这会产生各种可用性问题。

我不知道有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

使用AJAX。它允许您定义自己的get / post数据,这些数据不依赖于表单。