【发布时间】: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