17

我正在使用 pinax 开发一个网站。在我的一个模板中,我试图打开一个简单的 jquery 对话框。但是我不断收到“对话框不是函数”javascript错误。我正在使用 jquery 1.2.6 和 jquery-ui 1.6。我的 javascript 和 HTML 如下:

<html>
<head>
<link type="text/css" href="/site_media/smoothness/ui.all.css" rel="stylesheet" />
<script src="/site_media/jquery.js" type="text/javascript"></script>
<script src="/site_media/ui/ui.core.js" type="text/javascript"></script>
<script src="/site_media/ui/ui.draggable.js" type="text/javascript"></script>
<script src="/site_media/ui/ui.resizeable.js" type="text/javascript"></script>
<script src="/site_media/ui/ui.dialog.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
                    $('#dialogbox').dialog();
            });
 </script>
 </head>
 <body>
   <div id="dialogbox" title="dialog title">
     <p>Test dialog</p>
   </div>
 </body>
 </html>

有人可以解释为什么会这样吗?

4

8 回答 8

36

我试图通过使用公共 google 版本和从 jQuery UI 站点下载旧 (1.6) 版本并手动包含文件来复制您的错误。两者都没有引起问题(http://jsbin.com/uloqi看到它工作)。

因此,这意味着以下其中一项可能会解决您的问题:

  1. 使用 Firebug for Firefox 之类的工具来验证是否包含每个 JS 文件。
  2. 确保页面上没有其他可能导致错误的 JS。
  3. 验证您下载了正确版本的文件。

我不知道还能告诉您什么,因为您粘贴的代码在与正确的文件配对时可以完美运行。

于 2009-12-27T05:02:44.103 回答
4

我遇到了与上述问题完全相同的问题(消息框只打开一次)。我遇到的问题是消息框中的 html 也加载了 jquery。因为我不需要它,所以我可以毫无问题地删除它。否则,您可能需要进一步确定问题。

于 2010-10-24T11:12:40.597 回答
2

在某些情况下,如果同时加载多个不同的 JQuery 版本,您可能会收到此错误。

就我而言,我有一个使用母版的 ASP 页面。我的主人包括 JQuery 1.4.2.min 我的 aspx 页面包括 JQuery 1.7.2.min

当从控件调用 JQuery 函数时,它对使用哪个 JQuery 感到困惑,因此即使该脚本可以声明 JQuery 已加载(它可以显示 JQuery 版本),它也找不到任何 JQuery 函数。

当我从我的 aspx 文件中删除我的本地 JQuery 1.7.2.min 包含,并将我的母校从 1.4.2.min 更新到 1.7.2.min 时,问题就消失了。

于 2012-05-26T00:35:22.060 回答
2

Doug Neiner 的回答真的很有帮助。我的情况有点复杂,但仍然是同一点:

我从页面 A 打开了一个对话框,它像这样加载页面 B:

$('#MyDiv').dialog({
    autoOpen: false
})
$("#MyDiv").load("PageB.aspx", function () {
    $("#MyDiv").dialog("open");
});

问题是页面 A 和 B 都包含 jQuery。请注意:如果您将另一个页面加载到对话框中,则不需要包含相同的 js。

于 2012-08-04T00:56:34.077 回答
0

如前所述,您可能会覆盖现有的库。

处理它的一种方法是确保加载正确的文件。

另一种方法是在对话框和对话框中的内容之间插入 iframe。浏览器将 iframe 视为具有自己脚本的单独页面。因此,“在 iframe 之上”的内容脚本将与“在”iframe 之下的对话框脚本分开。

于 2013-08-01T09:56:30.203 回答
0

我也有这个问题,唯一对我有用的解决方案是保存对话框引用,如:

var confirmDialog = $( "#dialog-confirm" ).dialog({
    autoOpen: false
});
$("#test").click(function () {
    confirmDialog.dialog('open');
});

否则,我尝试过的一切都失败了

.dialog() 不是函数错误
希望这有帮助。

于 2017-08-29T13:06:08.057 回答
0

我有同样的问题。我是从 1.11.4 到 1.12.1 的 jQuery UI 更新造成的。我使用 NuGet 安装了升级,NuGet 从我的项目中删除了旧的 1.11.4 引用,但从未添加新的项目引用。

在本地运行该应用程序运行良好,但在部署它时,新的 1.12.1 文件从未与发布一起发布。我希望这对其他人有帮助。

于 2017-11-13T21:00:12.780 回答
0

可能导致此问题的另一种情况是嵌套布局最终会抑制 jqueryUI 脚本的呈现。我遇到了这种情况,通过视图文件夹向后工作,并通过布局向后工作,发现“流行”布局没有 jqueryUI,只有 jquery,即使 jqueryUI 是在层次结构中的“最顶层”布局中指定的。当我明确地将它添加到专门命名的布局文件中时,问题就解决了——尽管我怀疑真正的问题涉及挖掘布局并理解部分重复的原因。

于 2021-06-17T19:35:47.843 回答