2009-12-27 59 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文件從未使用發佈。我希望這可以幫助別人。