JQuery UI对话框 - *对话框不是函数*错误

时间:2009-12-27 03:05:44

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

我正在使用pinax开发一个网站。在我的一个模板中,我试图打开一个简单的jquery对话框。但是我一直得到“Dialog not a function”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>

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

8 个答案:

答案 0 :(得分:36)

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

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

  1. 使用Firebug for Firefox等工具验证是否包含了每个JS文件。
  2. 确保页面上没有可能导致错误的其他JS。
  3. 确认您已下载文件的正确版本。
  4. 我不知道还有什么可以告诉你,因为你粘贴的代码与正确的文件搭配使用效果非常好。

答案 1 :(得分:4)

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

答案 2 :(得分: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时,问题就消失了。

答案 3 :(得分:2)

Doug Neiner的回答非常有帮助。我的情况有点复杂,但仍然有相同的观点:

我从页面A打开了一个对话框,它加载了页面B,如下所示:

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

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

答案 4 :(得分:0)

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

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

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

答案 5 :(得分:0)

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

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

否则,我尝试的所有内容都失败了

.dialog() is not a function error
希望这有帮助。

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

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