我正在使用 IE7 和一些 jQuery 对话框,每个打开的对话框都会遇到大约 6meg 的泄漏。我假设这与关闭有关,但到目前为止我为删除它们所做的一切都没有帮助。此时,我认为我已经处理了除传入的回调函数之外的所有闭包,但即使在关闭并删除对话框后,它仍然泄漏 6 兆。相关源码为:
function DialogDestroyAndRemove(event) {
$(event.target).dialog("destroy").remove();
}
function CallbackAndCloseDialog(event) {
if (event.data.callback != undefined) {
event.data.callback(event.data.callbackResponse);
}
$("#" + event.data.dialogId).unbind('dialogbeforeclose').dialog('close');
}
// alert dialog modal with ok button
function AlertDialog(dialogTitle, dialogText, callbackFunction) {
// dynamically generate and add a div so we can create the pop-up
$('body').append("<div id=\"alertDialog\" style=\"display:none;\" title=\"" + dialogTitle + "\">" + dialogText + "</div>");
// define/configure the modal pop-up
$("#alertDialog").dialog({
draggable: false,
resizable: false,
modal: true,
autoOpen: true,
open: function() {
$("#alertDialog").parents('.ui-dialog-buttonpane button:eq(0)')
.focus() //focus so the button is highlighted by default
.bind('click', {
callback: callbackFunction,
callbackResponse: 'OK',
dialogId: 'alertDialog'
}, CallbackAndCloseDialog);
},
overlay: { backgroundColor: '#000', opacity: 0.5 },
buttons: { 'OK': function() { } }
}).bind('dialogbeforeclose', function(event, ui) {
// Close (X) button was clicked; NOT the OK button
if (callbackFunction != undefined) {
callbackFunction('cancel');
}
callbackFunction = null;
}).bind('dialogclose', DialogDestroyAndRemove);
}
我在上面做的一件事是,我不确定是否需要它,而不是在定义“确定”按钮时定义回调(因此有一个闭包,因为它引用了回调),而是在对话框打开后使用 .bind 定义它。打开。我希望能够将回调作为数据的一部分传递给单击事件可能有助于消除关闭。
有什么想法我还可以改变什么来消除这个泄漏吗?