2010-09-30 15 views
25

Ich bin sehr neu in jQuery und versuche, ein ziemlich einfaches jQueryUI-Dialogfeld in meiner PHP-Anwendung auszuführen. In Firebug Konsole erhalte ich die Fehlermeldung:jQueryUI - nicht abgefangene Ausnahme: Methoden können nicht aufgerufen werden

uncaught exception: cannot call methods on dialog prior to initialization; attempted to call method 'open' 

Hier ist mein Code:

$(function() { 
    $("#dialog").dialog({ 
     autoOpen: false, 
     show: "blind", 
     hide: "explode" 
    }); 

    $("#opener").live('click',function() { 
     $("#dialog").dialog("open"); 
     return false; 
    }); 
}); 

Ich habe auf den Fehler etwas googeln und nicht viel aufgedreht, außer dass jquery.ui.js wird, um den Fehler zu erzeugen mit:

if (isMethodCall) { 
    this.each(function() { 
     var instance = $.data(this, name); 
     if (!instance) { 
      throw "cannot call methods on " + name + " prior to initialization; " + 
"attempted to call method '" + options + "'"; 
     } 
... 

Irgendwelche Ideen? Ich freue mich über jede Hilfe, was diese Fehlermeldung und wie es zu lösen ist.

UPDATE: Ich habe versucht, die show/hide-Optionen zu kommentieren, und das hatte keine Auswirkungen auf mein Problem. Im Folgenden finden Sie die HTML:

<div class="demo"> 

    <div id="dialog" title="Basic dialog"> 
     <p>This is an animated dialog which is useful for displaying information. The dialog window can be moved, resized and closed with the 'x' icon.</p> 
    </div> 

    <button id="opener">Open Dialog</button> 

</div><!-- End demo --> 

Dieser HTML-Code in einer PHP-Datei enthalten ist, die in einer anderen PHP-Datei enthalten ist.

+1

Sieht aus wie jQuery-UI denkt, dass Sie nicht den Dialog vor dem Aufruf seiner offenen Methode initialisiert. Ich würde die etwas exotischen Optionen zum Anzeigen und Verbergen, die Sie verwendet haben, entfernen, um einzugrenzen, wenn dies das Problem ist. Stellen Sie außerdem sicher, dass Sie ein Element mit der ID "dialog" in Ihrem Markup haben. Wenn das nicht hilft, müssen Sie das tatsächliche Markup bereitstellen, das Sie verwenden, damit wir debuggen können. – Thomas

+0

Hi Thomas, ich habe die show/hide-Optionen entfernt (kein Effekt) und meinen HTML-Code oben eingefügt, danke – themerlinproject

+1

Ich denke, es hat etwas mit meinem letzten Satz zu tun. "Der HTML-Code ist in einer PHP-Datei enthalten, die in einem anderen PHP enthalten ist Datei".Ich habe Probleme mit jQuery und PHP-Includes durchgemacht und als Ergebnis habe ich begonnen, live() zu verwenden, um Funktionen für zukünftige Ajax-Inhalte verfügbar zu machen (wie dieses div). Ich weiß nicht, warum es hier nicht funktioniert. – themerlinproject

Antwort

21

OK, es hatte damit zu tun, dass ich den Dialog DIV auf eine PHP-Datei legte, die zu dem Zeitpunkt, als mein JS geladen wurde, noch nicht geladen war. Also habe ich das DIV für das Dialogfeld auf eine höhere Seite verschoben und der Button funktioniert jetzt auf jeder Seite meiner App. Ich hoffe, das hilft jemand anderem.

+7

@ user410341 - Froh, dass Sie es herausgefunden haben (und glücklich, ich könnte mit dem anderen Problem helfen). Wenn Sie möchten, können Sie Ihre eigene Antwort auf diese Frage akzeptieren, damit die Menschen in Zukunft schnell Antworten finden. :-) – JasCav

+0

Das gleiche Problem passiert mir, aber Aufruf der "remove" -Funktion (dies ruft 'destroy' -Methode auf. Sie sind richtig für das Problem, ich habe es behoben und $ (document) hinzugefügt .ready (function() {. ..) um den "remove" Anruf. – gotqn

1

In meinem Fall, ich benutze: jQuery UI - v1.9.2, und ich habe nur:

$this.sortable("destroy"); 

und ich bekomme:

Uncaught Error: Methoden können vor der Initialisierung nicht sortiert aufgerufen werden. versucht Methode aufzurufen ‚zerstören‘

Und ich festgelegt, wenn die Validierung hinzufügen:

if ($this.data("ui-sortable")) 
{ $this.sortable("destroy"); } 
+0

Ich habe mit einem anderen Fehler gekämpft, danke für Hinweis –

0

ich den gleichen Fehler haben, und die Probleme war die Reihenfolge der Code !! müssen Sie aber Ihr Javascript nach dem HTML-Code :).

0

In meinem Fall gab es einen JS-Konflikt mit Mootools (klassische Joomla, richtig?). Also ging ich main.js und änderte diese Zeile:

$(function() { 

auf diese:

jQuery(function ($) { 
+0

Welche main.js haben Sie geändert? –

+0

@AalexGabi, ich erinnere mich nicht mehr, aber jede JS jQuery-Datei sollte nicht Beginnen Sie mit $, wenn Sie Mootools und jQuery zusammen verwenden.Sie sollten angeben, dass Sie wirklich $ als jQuery-Objekt meinen. –

Verwandte Themen