jQuery-UI 对话框内存泄漏

2023-12-07

我正在使用 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 定义它。打开。我希望能够将回调作为数据的一部分传递给单击事件可能有助于消除关闭。

有什么想法我还可以改变什么来消除这个泄漏吗?


它实际上最终是由 jQuery UI 框架在显示模式时处理灰化背景的方式引起的。如果我删除 modal = true 和覆盖属性,内存泄漏将降至约 100k。

为了解决这个问题,我必须在没有模式选项的情况下创建对话框,然后自己添加一个 div 到页面(固定位置顶部,左侧,底部,右侧全部 0,交替灰色像素然后透明像素背景)并显示和隐藏对话框下方有一个 zindex 。

虽然它并不理想(默认的模式叠加看起来很漂亮且平滑),但它比我弹出的每个对话框泄漏那么多内存要好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jQuery-UI 对话框内存泄漏 的相关文章

随机推荐