Я работаю с IE7 и некоторыми диалоговыми окнами jQuery и сталкиваюсь с утечкой около 6 мг на каждое открытое диалоговое окно. Я предполагаю, что это связано с замыканиями, но пока все, что я сделал для их удаления, не помогло. На данный момент, я думаю, я позаботился обо всех замыканиях, кроме функции обратного вызова, которую я передаю, но она все равно пропускает 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);
}
Одна вещь, которую я сделал выше, это то, что я не уверен, что это необходимо, вместо того, чтобы определять обратный вызов для кнопки ОК, когда она определена (и, следовательно, иметь замыкание, так как она ссылается на обратный вызов), чтобы определить его с помощью диалог открыт. Я надеялся, что возможность передать обратный вызов как часть данных событию click может помочь удалить замыкание.
Есть идеи, что еще я могу изменить, чтобы избавиться от этой утечки?