3

我有一个非常大的 HTML 表,其中包含 1500 行(由 PHP 生成的标记)。每行都有一个 5 元素复选框和一个文本区域。

这是一个示例行:

<tr id="abc123">
    <td>abc123</td>
    <td valign="top"><input name="v1" value=1 type="checkbox"></td>
    <td valign="top"><input name="v2" value=2 type="checkbox"></td>
    <td valign="top"><input name="v3" value=3 type="checkbox"></td>
    <td valign="top"><input name="v4" value=4 type="checkbox"></td>
    <td valign="top"><input name="v5" value=5 type="checkbox"></td>
    <td valign="top"><textarea name="notes"></textarea></td>
    <td valign="top"><input type="submit" name="submit"></td>
    </tr>

还有更多的列,但这是重要的部分。

最好的设置方法是什么,以便每 60 秒检查/重绘一次提交按钮?如果行/表单已提交,则提交按钮需要更改为链接。

一次发生这么多写入会导致糟糕的性能吗?我们的服务器可以处理它,但我更关心客户端功能(使用中档或更差的台式机)。

除了将记录拆分到单独的页面(客户对此不感兴趣)之外,是否有更好的方法在单个页面上处理这么多表单?

更新 我认为让用户点击他们想要更新的行可能更有意义,然后只会将该行转换为表单。如果一行失去焦点,我会显示一个确认框,这样他们就不会丢失或提交不完整的数据。

4

3 回答 3

2

1) 将整个表格放在单个表单标签对之间。

2) 使用如下所示的名称标签标识每个复选框或其他元素:

checkbox_abc123_1  (value=1)
checkbox_abc123_2  (value=2)
textbox_abc123 (value=foobar)

3) 为每个输入对象添加一个 onClick 或 onBlur 事件。这将是您的 ajax 调用。将 id 标签作为“名称”发送,将输入值作为“值”发送。您将使用这些进行 POST 处理。

4) 在您的 POST 页面上,识别您的输入元素(提示:explode('_',$name);),验证内容,然后写入您的 SQL 表。

您可以使用您的帖子页面为每个表格行上的 div 提供更新,向其他用户宣布该字段已更新。但是,这不会解决为其他用户更新输入对象的问题。

如果您需要回复实际的代码,但这应该会为您指明正确的方向。

于 2012-10-23T19:07:49.273 回答
0

客户端应该没有问题,除非您期望特定的限制,否则大多数现代浏览器应该可以轻松应对。这可能需要一些时间,但没问题。

如果您担心性能,请确保您的代码干净且正确嵌套,我们可以说,有效的 html 严格代码,这将有助于客户端呈现页面。

关于时间,你必须使用 javascript 或类似的,这取决于你喜欢什么来检查时间;在javascript中设置计时器并不难。在页面末尾加载脚本,这样它就不会干扰表格的初始呈现。

此外,如果您可以控制服务器,请尝试使用 mod_deflate,如果您不能并且您正在使用 php,请在输出缓冲区中使用 zip,如果您使用任何其他服务器端语言,请尝试使用任何可用的压缩方法。

更新

这是一个非常好的想法,它将大大减少页面传输的重量和渲染时间;您的用户会意识到这一点,而且 DOM 的遍历也将更快、更容易

再见

于 2012-10-19T12:43:20.303 回答
0

尝试使用插件更适合用户jQuery Pagination或尝试DataTable

于 2012-10-19T12:45:32.793 回答