我正在使用 jquery 开发一个小型 Web 客户端应用程序
会话第一页的应用程序仅包含触发 ajax 请求的应用程序菜单,显示在新选项卡(页面内)中接收到的数据并通过回调设置事件处理程序。
当用户打开了多个选项卡时,使用 $(tab).detach() 将未聚焦的选项卡从 DOM 中分离出来,并且返回的对象存储在一个数组中,直到选项卡重新获得焦点(对象然后追加回 DOM)。
detach 的魔力在于返回的对象包含所有事件处理程序绑定到其中的所有 html 元素(所以当我们将它附加回来时,我们不必重新绑定任何东西)这是伟大和快速的,除了我无法设法序列化该对象(并存储它以恢复用户在网站的不同页面上浏览时打开的选项卡)。我可以找到 html,但事件处理程序...?
$panels.panel[el]=$("#"+el).detach();
alert(itobj($panels.panel[el])); //-> key: 0 value: [object HTMLDivElement]
alert($panels.panel[el].html()); //-> return the innerhtml
sessionStorage.setItem(el,$.toJSON($panels.panel[el]));
alert(sessionStorage.getItem(el)); //-> {"length":1,"0":{},"context":{"jQuery17204145571568968498":1,"location":{}},"selector":"#panelid"}
那么会话如何恢复这些事件处理程序呢?它与上下文有什么关系吗?还是有更好的序列化方法(一直使用来自:http ://code.google.com/p/jquery-json/ 的 toJSON )?
非常感谢任何帮助,所以感谢 tun(跟踪所有回调以召回它们的想法非常令人沮丧 - 并且使分离的魔力变得无用)