我正在使用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>
有人可以解释为什么会这样吗?
答案 0 :(得分:36)
我尝试通过使用公共谷歌版本和从jQuery UI网站下载旧版(1.6)版本并手动包含文件来复制错误。两者都没有引起问题(http://jsbin.com/uloqi看到它有效)。
因此,这意味着以下其中一项可能会解决您的问题:
我不知道还有什么可以告诉你,因为你粘贴的代码与正确的文件搭配使用效果非常好。
答案 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 是在层次结构中的“最顶层”布局中指定的。当我明确地将它添加到特定命名的布局文件时,问题得到了解决 - 尽管我怀疑真正的问题涉及挖掘布局并理解为什么部分重复。