Pracuję z IE7 i niektórymi oknami dialogowymi jQuery i mam problem z otwarciem około 6megów na jedno okno dialogowe. Zakładam, że ma to związek z zamknięciami, ale jak dotąd wszystko, co zrobiłem, aby je usunąć, nie pomogło. W tym momencie myślę, że zająłem się wszystkimi zamknięciami za wyjątkiem funkcji zwrotnej, którą przekazuję, ale nadal przecieka ona 6 megawatów nawet po zamknięciu i usunięciu okna dialogowego. Odpowiedni kod źródłowy jest:Wycieki okien dialogowych jQuery-UI
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);
}
Jedno zrobiłem powyżej, że nie jestem pewien, czy to było potrzebne zamiast definiowania zwrotnego dla przycisku OK, gdy jest zdefiniowana (a więc konieczności zamknięcia, ponieważ jest to odwołanie do oddzwanianie), aby zdefiniować go za pomocą .bind po otwarciu okna dialogowego. Miałem nadzieję, że możliwość przekazania wywołania zwrotnego jako części danych do zdarzenia kliknięcia może pomóc w usunięciu zamknięcia.
Wszelkie pomysły, co jeszcze mogę zmienić, aby pozbyć się tego wycieku?
To ma związek z tym, jak IE obsługuje przezroczystość PNG, która jest ... okropna. Jeśli używasz prostego, kolorowego filtra IE zamiast obrazu, możesz uzyskać efekt bez pamięci. W twoim jQuery.UI.css zmień klasę '.ui-widget-overlay' i usuń wszystko z' url ('naprzód w deklaracji' background: ', spowoduje to jednokolorową nakładkę półprzezroczystą –
Wydaje się być z w jaki sposób IE radzi sobie z ogólną przejrzystością, usunąłem aspekt adresu URL w tle (pozostawiając tylko jednolity kolor) i nadal to robiłem, dopóki nie usunąłem filtru przezroczystości, który zniknął – Parrots
Właściwie usuwanie modalu: true z mojego okna dialogowego przecięło użycie pamięci IE 8 w połowie (od 150 MB do 70). – daschl