php - 跨页面记住选中的复选框 - 最好的方法是什么?

标签 php javascript checkbox

我需要添加类似于 Gmail 的功能,其中项目列表中的复选框会在多个结果页面以及离开和返回结果时被记住。我想弄清楚的是最好的方法。我正在使用 PHP,可能还使用 jQuery。

我的第一个想法是向每个复选框添加一个 onClick,触发 AJAX 回调到服务器,该服务器将 id 存储在 session 中的数组中。每次加载项目列表时,系统都会检查该行是否已选中,并在必要时选中复选框。为了可靠性,在检查是否无法完成对服务器的请求(连接问题、服务器错误等)后,将取消选中该复选框,并且将尽可能快地发出请求。

这听起来不错,除了一些项目:

  • 全部检查:发生了什么?它是否向服务器发送 30 个(默认页面项)请求?还是删除所有 onClicks,选中复选框,向服务器发送包含所有 ID 的请求,然后重新添加 onClicks?或者...?取消选中所有类似的问题。
  • 速度:如果 100 多个用户一直在选中和取消选中,可能会开始出现问题
  • 浏览器速度:我认为最好在页面加载后使用 JS 添加 onClick,如果一页上有 500 个或更多项目,我认为这可能需要一到两秒。 check all 会成为一个更大的问题。

过去,我还没有找到一种可靠的方法来检测用户何时离开页面。如果有可靠的方法,那么我可以看到这是一个选项,因此它只在每个页面卸载时记录。

有没有其他的解决办法或者更好的方法?

编辑Eran Galperin所述,check all 方法只需要检查每个复选框,然后对所有行进行 ajax 调用。无需删除 onClick。

此外,事件委托(delegate)方法看起来是个好主意——会使事情变得容易得多。

最佳答案

  1. 当您以编程方式更改复选框的选中状态时,不会触发 onclick 事件。当用户点击全选/取消全选链接时,您可以发送不同的 AJAX 请求,而不必担心附加到各个复选框的点击事件。
  2. 这是使用每次点击请求时的权衡。或者使用“保存”按钮保存整个表单。
  3. 使用event delegation - 将一个 onclick 事件附加到包含所有复选框的整个容器,并检查事件的目标以查看是否单击了一个复选框。另外,就我个人而言,我会避免在同一页面上显示 500 个不同的选项。如果绝对有必要提供这么多选项,请将它们分成几个区域/页面。

对于离开页面的用户,您可以使用 onbeforeonload事件,但是,如果浏览器崩溃或以其他方式异常退出,则不会被捕获。根据能够捕获用户更改的重要性来使用它。

关于php - 跨页面记住选中的复选框 - 最好的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/365757/

相关文章:

javascript - PHP 相当于 JavaScript 的parentNode 属性

Android UI 单元测试 : how to find dynamically added checkbox?

PHP 启动 : Unable to load dynamic library 'C:\xampp\php\ext\php_oci8_12c.dll' - The specified procedure could not be found

php - MySQL 数据库中没有显示任何内容

javascript - 自动化: Typing into input field throws error

c# - 如何在没有困惑的情况下使用带有复选框的 if 语句

javascript - 在 javaScript 的条件 && 语句中迭代数组?

php - session 过期后自动注销用户

php - 如何调用yii的main.php中定义的logPath?

javascript - 当距离 > 100 使用 jquery 和 css 时如何修复滚动时的 div?