使用数据和事件将元素移动到iframe的父级

时间:2013-06-06 09:02:04

标签: javascript jquery asp.net

这就是情况。 我在iframe中有一个复杂的UI,用户可以在提交之前执行多个操作。在此过程中,用户可以切换到另一个页面(在iframe中)并返回。这意味着iframe内有2个回发。

显然,我不希望用户丢失所有内容,但由于所有操作都是在客户端完成的,因此我无法从服务器重新加载以前的状态。

所以现在,我正在尝试将第一页内容移动到iframe父级,并在我们回来时将其重新放回原位。我已经走了一半,因为元素显示在页面中,但是它们丢失了数据属性和事件处理程序。

我正在使用它来移动父母的内容:

$("#resp").clone(true).attr("id", "refillResp").appendTo(window.top.$("#global"));

然后把它放回去:

window.top.$("#global").find("#refillResp").clone(true).attr("id", "resp").appendTo($("#tdResp"));

有没有人知道这样做的方法? PS:我已经测试了内容在简单移动父级时的反应,数据和事件已经消失。

1 个答案:

答案 0 :(得分:0)

这是一个评论,但它不适合那里。

围绕不同文档移动DOM元素总是有点冒险。因为它可能导致意外行为(内存泄漏,行为奇怪的元素)。在目前的浏览器中,它大部分时间都有效,但我不推荐它。

如果你使用jQuery,你还有另外一个问题。 jQuery有一个缓存,用于存储分配给Object的dataevent信息,此缓存与文档窗口一起存储。有关详细信息,请阅读此答案,另一个问题:

How to set jQuery data() on an iFrame body tag and retrieve it from inside the iFrame?

因此,如果您在不同文档之间移动带有jQuery的元素,那么您一方面会松开这些信息,另一方面它可能会导致内存泄漏。

随着事件发生,它更加复杂。例如如果你有委托事件,它可能会变得非常混乱。

如果您需要在iframe和parent之间交换数据,您应该考虑其他一些逻辑。

我在对我的另一个答案的评论中也提到了这一点,我在这里提到了这篇文章: How to set jQuery data() on an iFrame body tag and retrieve it from inside the iFrame?