1

ASP UpdatePanel 中的 jQuery 小部件需要在 ajax 请求后重新初始化是一个常见问题,但是我的问题是在替换 UpdatePanel 中的 HTML 之前事件没有解除绑定。每当您调用 .html("...") 或 .remove() 时,jQuery 都会为您解决这个问题,但 UpdatePanel 不使用 jQuery。

我有弹出元素(在 UpdatePanel 内部),当用户在它们外部单击时需要隐藏这些元素,因此我制作了一个 jQuery 特殊事件来检测何时发生这种情况,但是在 Ajax 请求之后永远不会调用 Teardown 函数。因此,随着时间的推移,不再附加到文档的元素上的事件处理程序越来越多。

我可以让我的小部件初始化函数(在每个 Ajax 请求之后运行),检查分离的元素并取消绑定它们的事件,但我担心这可能会导致其他问题。

4

2 回答 2

1

虽然我用之前的答案解决了这个问题,但这篇关于代码项目的文章可能会对其他有类似问题的人有所帮助:http: //www.codeproject.com/Articles/34348/jQuery-Memory-Leak-in-UpdatePanel

首先它建议使用Sys.Application.add_loadwhich 在页面加载和 ASP Ajax 请求之后运行,尽管它不会解决您的内存泄漏。

其次,注意如何通过 javascript 闭包绑定事件。但是,这可能无法完全解决 UpdatePanel 的特定问题。

第三,您可以dispose向 HTML 元素添加一个函数,该函数在 ASP 使用 ajax 请求销毁 HTML 时执行。dispose 函数应该取消绑定事件处理程序,任何删除对该元素的任何其他引用。这应该是 ASP UpdatePanel 内存泄漏的最后一根钉子。

于 2013-04-17T22:21:23.083 回答
0

似乎有一个简单的解决方案,即在弹出窗口显示时绑定“clickout”事件,在弹出窗口隐藏时取消绑定。由于 ajax 请求,这仍然可能导致单个事件不会被解除绑定,但这是可以容忍的。

于 2013-04-09T23:01:10.847 回答