我在我的应用程序中广泛使用jQuery UI(1.8.16)。
我开发了一个简单的函数,它使用ajax调用获取一些json数据,并使用jQuery UI按钮集在寻呼机中转换DIV:
<div id="answersPager"></div>
这是javascript:
BuildAnswersPager: function(selectedPage, totalPages) {
$("#answersPager").empty();
if (totalPages > 1) {
var ctl = [];
var isChecked = "";
for (var i = 1; i <= totalPages; i++) {
if (i === selectedPage) {
isChecked = " checked='checked'";
}
else {
isChecked = "";
}
ctl[i] = "<input class='answersRadioPager' type='radio' value='" + i + "' id='a_page_" + i + "' name='answer_pager' " + isChecked + "/><label for='a_page_" + i + "'>" + i + "</label>";
}
$("#answersPager").append(ctl.join(''));
$("#answersPager").buttonset();
}
}
我已将每个按钮绑定到实时点击事件,以便每次用户搜索新术语时,我会重新加载窗口,构建新的寻呼机并允许他/她分页结果。
$(".answersRadioPager").live('click', function() {
// Fetches json data (new page)
});
一切正常但我想知道在重建它之前是否必须销毁按钮组(此时我只是将其清空)。
我必须注意哪些内存问题?
答案 0 :(得分:1)
不是真的。 .empty
通过jQuery的内部.cleanData
方法删除附加到任何已删除标记的所有数据和处理程序,从而防止任何内存泄漏,因此您非常安全。来自docs:
为了避免内存泄漏,jQuery删除了其他构造,如数据 和删除之前来自子元素的事件处理程序 元素本身。
仅供参考 - .html
也会调用.cleanData
,因此使用.html('')
是等效的。
答案 1 :(得分:0)
一个buttonset(),即使从未连接到父节点,也不会将自己标记为垃圾收集准备就绪。
尝试:
我发现需要调用buttonset('destroy')来解决问题。