2009-12-27 80 views
16

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

<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> 

是否有人可以解释为什么发生这种情况?

+1

由于某种原因,jQuery UI对话框代码没有正确初始化。尝试构建一个合适的jQuery UI UI文件,而不是逐个引用它们 - 它可能会解决您的问题。无论如何,这就是你应该如何使用它的原因。看看http://jqueryui.com/download – 2009-12-27 03:18:06

+0

我也试过这种方法,但它给了我同样的错误。 – kartikq 2009-12-27 03:27:49

+0

你确定你所包含的javascript文件是这些文件的官方发布版本吗?还没有被定制(无意中破坏了某些东西)? – 2009-12-27 05:59:20

回答

36

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

所以,这意味着以下可能会解决你的问题之一:被列入

  1. 使用类似Firebug工具的Firefox来验​​证每一个JS文件。
  2. 确保页面上没有其他JS可能导致错误。
  3. 确认您拥有下载的文件的正确版本。

,我不知道还有什么要告诉你,因为你的代码粘贴,当与正确的文件配对,完美的作品。

+9

Doug,我的页面中包含了另一个JS文件,它导致了这个问题。我需要喝更多的咖啡因。 – kartikq 2010-01-27 20:35:27

+6

+1 2.nd点帮助我。 2X将jquery库添加到同一个文档中。 – karlisup 2012-01-16 14:10:18

+1

确保您没有自定义您的jQuery UI版本以不包含对话框组件。 – Twilite 2012-12-07 12:59:56

4

我的问题与上面描述的完全相同(messagebox只打开一次)。我遇到的问题是,messagebox中的html也加载了jquery。由于我不需要它,我可以毫无问题地将其删除。否则,您可能需要进一步查明问题。

2

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

在我的情况下,我有一个ASP页面,使用主。 我的主人,包括JQuery的1.4.2.min 我的aspx页面我包括JQuery的1.7.2.min

当JQuery的职能从控制调用,它弄糊涂了哪些JQuery的使用,因此即使该脚本可以声明JQuery已加载(它可以显示JQuery版本),但未能找到任何JQuery函数。

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

2

Doug Neiner的回答真的很有帮助。我的情况有点复杂,但仍然涉及到相同点:

我打开从网页A,加载网页B这样的对话:

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

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

0

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

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

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

0

我只是有这个问题也和这对我的作品是拯救像对话框参考的唯一解决方案:

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

否则,一切我已经试过失败,

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

+0

保存为参考没有为我工作:( – Anupam 2017-09-13 14:11:40

0

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

在本地运行该应用程序效果很好,但是在部署它时,新的1.12.1文件从未使用发布。我希望这可以帮助别人。