wake-up-neo.com

JQuery UI-Dialog - * Dialog ist kein Funktionsfehler *

Ich entwickle eine Website mit Pinax. In einer meiner Vorlagen versuche ich, ein einfaches Jquery-Dialogfeld zu öffnen. Ich bekomme jedoch immer den Javascript-Fehler "Dialog nicht eine Funktion". Ich verwende Jquery 1.2.6 und Jquery-Ui 1.6. Mein Javascript und HTML sind wie folgt: 

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

Kann jemand bitte erklären, warum das so ist?

17
kartikq

Ich habe versucht, Ihren Fehler zu duplizieren, indem Sie die öffentlichen Google-Versionen verwenden und die ältere Version (1.6) von der jQuery-Benutzeroberflächen-Website herunterladen und die Dateien manuell hinzufügen. Kein Problem verursacht ( http://jsbin.com/uloqi um zu sehen, dass es funktioniert). 

Das bedeutet, dass eines der folgenden Probleme Ihr Problem lösen kann:

  1. Verwenden Sie ein Tool wie Firebug for Firefox, um zu überprüfen, ob jede JS-Datei enthalten ist.
  2. Stellen Sie sicher, dass sich auf der Seite keine anderen JS befinden, die einen Fehler verursachen könnten.
  3. Stellen Sie sicher, dass Sie die richtigen Versionen der Dateien heruntergeladen haben.

Ich weiß nicht, was ich Ihnen sonst sagen soll, da der eingefügte Code, wenn er mit den richtigen Dateien gekoppelt ist, einwandfrei funktioniert.

36
Doug Neiner

Ich hatte genau das gleiche Problem wie das oben beschriebene (messagebox öffnet sich nur einmal). Das Problem, das ich hatte, war, dass die HTML-Datei in der Messagebox auch Jquery lädt. Da ich es nicht brauchte, konnte ich es problemlos entfernen. Andernfalls müssen Sie das Problem möglicherweise noch etwas genauer festlegen.

4
Sander

Unter bestimmten Umständen können Sie diesen Fehler erhalten, wenn mehrere Versionen und verschiedene JQuery-Versionen gleichzeitig geladen werden.

In meinem Fall habe ich eine ASP - Seite, die einen Master verwendet. Mein Master enthielt JQuery 1.4.2.min Meine Aspx-Seite, in die ich JQuery 1.7.2.min aufgenommen hatte

Wenn JQuery-Funktionen von einem Steuerelement aus aufgerufen wurden, wurde es verwirrt, welche JQuery verwendet werden sollte. Das Skript konnte jedoch angeben, dass JQuery geladen war (es konnte die JQuery-Version angezeigt werden). JQuery-Funktionen wurden jedoch nicht gefunden.

Als ich meine lokale JQuery 1.7.2.min-Aufnahme aus meiner Aspx-Datei entfernte und mein Material von 1.4.2.min auf 1.7.2.min aktualisiert, ist das Problem behoben.

2
Paul Gorbas

Die Antwort von Doug Neiner hat wirklich geholfen. Mein Fall war etwas komplizierter, kommt aber immer noch zu demselben Punkt:

Ich habe einen Dialog von Seite A geöffnet, der Seite B wie folgt lädt:

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

Das Problem ist, dass auf Seite A und B jQuery enthalten war. Beachten Sie: Wenn Sie eine andere Seite in ein Dialogfeld laden, müssen nicht dieselben js einbezogen werden.

2
user1575422

Ich habe auch nur dieses Problem und die einzige Lösung, die für mich funktioniert, war das Speichern der Dialogreferenz wie folgt:

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

Ansonsten ist alles, was ich versucht habe, fehlgeschlagen 

.dialog () ist kein Funktionsfehler
Ich hoffe das hilft.

0
Striped

Wie bereits erläutert, überschreiben Sie wahrscheinlich die vorhandenen Bibliotheken.

Eine Möglichkeit, damit umzugehen, besteht darin, sicherzustellen, dass die richtigen Dateien geladen werden.

Eine andere Möglichkeit ist das Einfügen eines iFrames zwischen dem Dialog und dem Inhalt des Dialogs. Iframes werden vom Browser als eigene Seite mit eigenen Skripts behandelt. Die Skripte des Inhalts "über" des Iframes werden also von den Scripts des Dialogs "unter" dem Iframe getrennt. 

0

Ich hatte das gleiche Problem. Meine wurde durch ein jQuery-UI-Update von 1.11.4 auf 1.12.1 selbst verursacht. Ich habe das Upgrade mit NuGet installiert und NuGet entfernte die alte Referenz 1.11.4 aus meinem Projekt, fügte jedoch nie die neue Projektreferenz hinzu. 

Wenn die Anwendung lokal ausgeführt wurde, funktionierte sie hervorragend, aber bei der Bereitstellung wurde die neue 1.12.1-Datei nie mit der Veröffentlichung erstellt. Ich hoffe das hilft jemand anderem.

0
Rafiki