【问题标题】:JQuery 1.11.2 cannot call methods on dialog prior to initialization; attempted to call method 'destroy'JQuery 1.11.2 不能在初始化之前调用对话框上的方法;试图调用方法“销毁”
【发布时间】:2023-03-04 03:27:01
【问题描述】:

我最近从 JQuery 1.3“升级”到 1.11.2(我知道,我知道,这个项目已有 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 而不是其他版本中被抛出。

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

谢谢!

【问题讨论】:

  • 错误信息清楚地描述了问题所在。您试图在对话框存在之前打开或销毁它。在尝试销毁或打开它之前,您需要首先确保它是一个对话框。我建议测试一下它是否有 ui-dialog 类。
  • 我明白它在说什么,但我不明白为什么这在以前的版本中有效,而不是这个?看起来这是一个很标准的问题,如果一个对话框不存在,那么无论版本如何,它都不存在,不是吗?
  • 因为库几乎被重写了?为什么要添加此要求是需要针对 jQuery UI 开发团队提出的问题
  • 我认为如果它只是默默地忽略调用而不是抛出错误会更好,尽管我确信他们有充分的理由让它抛出错误。
  • 谢谢,我想我的好奇心占了上风 :) 谢谢你的帮助。我还发现一篇文章指出最新的 JQuery 不允许在未初始化的项目上调用方法。我很感激!

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


【解决方案1】:

您不能在对话框存在之前将其销毁或打开。我建议先创建对话框,然后再打开或关闭它。

$(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");
    }

【讨论】:

    猜你喜欢
    • 2013-02-21
    • 2014-06-10
    • 2013-07-27
    • 2014-04-13
    • 2019-10-02
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多