JQuery 1.11.2在初始化之前无法在对话框上调用方法;试图调用方法'destroy'

时间:2015-01-29 16:34:25

标签: javascript jquery jquery-ui jquery-ui-dialog

我最近从JQuery 1.3“升级”(我知道,我知道,这个项目已有6年历史,我将其从另一个开发人员那里接管,希望能够完成它......正确)到1.11.2,使用JQuery Migrate v1.2.1,因为版本到版本可能会让我度过余生。

无论如何,我遇到的是最小的问题,其中大部分是我能够修复的,但是这个问题让我很难过。以下代码在1.5.1中完全正常,但在1.11.2中抛出此错误“在初始化之前无法在对话框上调用方法;尝试调用方法'destroy'”。

以下是代码:

$(document).ready(function() {
    setupEvents();
});

function setupEvents() {
    $('.dmr-id').click(function(e) {
        e.preventDefault();
        loadConsumerServiceDialog();
    });

    function loadConsumerServiceDialog() {
        $('#consumer-service-dialog').dialog("destroy");
        $('#consumer-service-dialog').dialog("open");

        $('#consumer-service-dialog').dialog({
            modal: true,
            height: 740,
            width: 1000,
            title: 'Consumer Service Detailed Relations',
            resizable: false
        });
    }

如果我在'destroy'方法中添加注释,它会在'open'方法上抛出相同的错误。这似乎是一个明显的错误,对话框没有初始化,但如何在打开之前进行初始化?我不明白为什么它会被引入1.11.2而不是其他版本。

任何帮助都将不胜感激,如果有人能指出我正确的方向,我不反对自己搞清楚。

谢谢!

1 个答案:

答案 0 :(得分:3)

在对话存在之前,您无法销毁或打开对话框。我建议事先创建对话框,然后稍后再打开或关闭它。

$(document).ready(function() {
    setupEvents();
});

function setupEvents() {
    var consumerServiceDialog = $('#consumer-service-dialog').dialog({
        modal: true,
        height: 740,
        width: 1000,
        title: 'Consumer Service Detailed Relations',
        resizable: false,
        autoOpen: false
    });
    $('.dmr-id').click(function(e) {
        e.preventDefault();
        loadConsumerServiceDialog();
    });

    function loadConsumerServiceDialog() {
        //consumerServiceDialog.dialog("destroy"); // why destroy it?
        consumerServiceDialog.dialog("open");
    }