当前位置:  开发笔记 > 编程语言 > 正文

后退按钮处理动态表格

如何解决《后退按钮处理动态表格》经验,为你挑选了3个好方法。

我有一个包含文本字段数组的表单.用户(通过javascript)可以向表单添加任意数量的文本字段.提交表单并按下后退按钮后,表单仅显示首次呈现时原始表单上的字段(任何添加的文本字段都将丢失).在用户提交表单时,允许后退按钮呈现状态的最佳方法是什么?欢迎任何想法,我尝试过的一些事情是:

将表单数据放入cookie中(由于几个原因,这不是很好,但对我来说最大的杀手是cookie大小限制为4K)

将表单数据放入会话中

通过AJAX提交表单,然后管理历史记录

谢谢您的帮助.我在我的网站http://fishtale.org/formtest/f1.php上发布了一个测试表格.这里还有一个简单的表格,展示了我提到的行为:

Add Form Element

这类似于我前一段时间发布的问题,返回按钮的最佳方式是保留表单数据,但是,此表单的元素由用户修改.



1> bobince..:

如何创建一个(没有name或没有表单,所以它没有提交),你在其中存储要添加的额外字段的编码列表及其值?虽然浏览器不会记住"返回"上新添加的字段,但它记住从一开始就在表单中的隐藏字段的值.

这是一个保存文档卸载的额外字段并准备好检索它们的示例:



笔记:

您可以使用form.onsubmit而不是window.onbeforeunload只需要它来记住提交中的值.onunload不起作用,因为某些浏览器在该事件发生之前已经存储了旧的表单值.

在Firefox中,隐藏输入的位置很重要.出于某种原因,如果你把它放在动态添加的字段下面,Firefox会对它的输入感到困惑并且不记得该值.

此示例在Opera中不起作用.它可以在Opera中工作,但这很痛苦.Opera调用加载和卸载事件是不一致的,因此您必须改为使用onsubmit,或者在轮询间隔设置隐藏字段等.更糟的是,当歌剧记得以前表单字段值,它实际上不填充它们,直到 onload事件已经被解雇了!这已经导致许多形式脚本问题.如果需要Opera兼容性,可以通过在onload中加入一个小超时来等待表单值进入,从而解决这个问题.


这真是太好了!无需会话,AJAX,Cookie和所有其他东西!大!

2> cfeduke..:

我找不到一个预先编写的库,但我确信它之前已经解决了.如果我不得不自己采取这种做法:

    使用命令模式,以便通过添加控件修改页面UI的每个方法也调用AJAX方法将调用的方法(文本Javascript表示)推送到存储在服务器会话中的队列.

    body onLoad完成后,使用AJAX方法在服务器的会话中查询用户所在页面的命令队列.如果检索到一个,则只需eval队列中的每个成员以用户执行的相同顺序重建页面的UI.

请记住,这种方法不仅可以记录控件的添加,还可以记录删除.对于用户输入控件,您需要单独的状态持有者,例如文本框(您可能还需要使用AJAX方法访问的服务器端会话).



3> Kornel..:

在优秀的浏览器中,只需不破坏它就可以让它完美运行.

对于单个浏览器会话,Firefox 1.5对整个Web页面(包括其JavaScript状态)使用内存中缓存.在访问页面之间前后移动不需要加载页面,并且保留JavaScript状态.资源

Opera和WebKit也支持这一点.但是,DOM缓存只有在您遵守规则时才有可能:

    不要使用onunload,onbeforeunload.

    不要使用Cache-control: no-storemust-revalidate.
    在PHP中,你必须session.cache_limiterpatently_ridiculous(我认为它们拼写nocache)改为none.

    session_cache_limiter('none');
    

    不幸的是,HTTPS也出局了.

如果您不强制浏览器重新加载页面,则不会.它们将保持DOM及其值不变,正如RFC 2616所暗示的那样.


但是,如果您正在寻找存储数据的地方,那就是非常聪明的黑客 - window.name可以存储数兆字节的数据.它不会发送到服务器,也不会在Windows之间共享.

还有Flash cookie和HTML 5 localStorage在IE8和Safari 4中实现.


jQuery使用onunload来插入IE内存泄漏,onunload打破缓存:http://groups.google.com/group/jquery-dev/browse_thread/thread/67abd50cd3ef0fc8
推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有