我正在使用缓存进行花哨的ajaxy dhtml。在我ajax下载感兴趣的页面后,我将内容存储在变量数组
中HistoryCache[url].load(url, handleRSX);
(这部分工作正常)
之后我执行链接修复程序:
$('a', HistoryCache[url]).click(...)
...
是将普通链接转换为我的ajaxy调用的代码。
完成所有这些操作后,我需要.append()
将我的新内容发送到专门用于保存新内容的div
。在追加I .remove()
之前,之前有任何内容。
问题:当请求的网址位于我的HistoryCache
时,我没有.load()
它,我也没有通过.click()
修复这些链接。我只需将缓存中的内容放入我的持有者中。此时链接不已修复,实际上将浏览器更改为预期的链接,而不是调用我的函数。
问题:为什么.click()
在.removed()
并重新.append()
之后不会保留在存储的缓存数组中?
忘记提及我已通过将点击覆盖更改为原生HTML this.onclick = function...
而不是$(this).click(function(){});
来解决此问题
答案 0 :(得分:4)
在.remove()上有意删除所有附加的jQuery事件以防止内存泄漏。如果没有这样做,jQuery会以一种糟糕的方式泄漏内存。
要使用jQuery解决此问题,您可以使用.live()或.delegate()。两者都通过在DOM上传播事件而不是绑定元素(实时文档和委托情况下指定的元素),并在删除和添加后工作。