jQuery UI Dialog wird nicht ein zweites Mal geöffnet

7

Ich verwende jqueryui für ein Dialogfeld. Wenn Sie das erste Mal auf den Link "Klicken Sie für einen Modal" klicken, klicken Sie auf OK. Wenn Sie die ESC Taste drücken, verschwindet das Dialogfeld. Aber die Klicks danach funktionieren nicht. Ich möchte, dass diese auch funktionieren. Aktualisieren der Seite macht alles in Ordnung.

HTML:

%Vor%

jQuery-Ausschnitt:

%Vor%

Wie kann ich mehrere Klicks funktionieren lassen?

    
Istiaque Ahmed 02.01.2012, 11:54
quelle

3 Antworten

19

Vier Dinge.

Wenn der Dialog wiederverwendbar sein soll, sollten Sie ihn zunächst vor beim ersten Klick erstellen und die Option autoOpen auf false setzen. Um den Dialog zu öffnen, sollten Sie dialog('open') verwenden.

Zum Beispiel:

%Vor%

Beachten Sie, dass ich ein var dialog zum Speichern von $('#dialog') erstelle. Dies ist effizienter, weil jQuery ansonsten in einem Codecode nach #dialog suchen müsste.

Zweitens haben Sie einen Fehler in Ihrem HTML: Es gibt ein Zitat zu viele hier:

%Vor%

Dies kann in einigen Browsern (aber nicht in allen) zu unerwartetem Verhalten führen, was das Debuggen erschwert. Entfernen Sie das zusätzliche Angebot.

Drittens, wenn ich mich richtig erinnere, behandelt jQuery UI Dialog bereits den Schlüssel ESC , so dass Sie das nicht selbst tun müssen. Wenn Sie etwas anderes tun möchten, als das Dialogfeld zu schließen, wenn Sie auf "Entsperren" klicken, sollten Sie die beforeClose Ereignis. Wenn Sie nur den Dialog schließen möchten; Du bist fertig. : -)

Und schließlich ist es eine gute Übung, keine Inline-Stile zu verwenden. Also statt dessen:

%Vor%

Erstellen Sie eine CSS-Datei mit folgendem Inhalt:

%Vor%

Sie können dasselbe für #dialog tun, einschließlich des Rahmens, den Sie jetzt mit JavaScript anwenden:

%Vor%

Hoffe, das hilft.

Hier ist ein Arbeitsbeispiel, das die vier genannten Punkte anwendet: Ссылка

Beachten Sie, dass die jQuery UI-Stile fehlen, daher ist der Dialog ein wenig hässlich. : -)

Um sicherzustellen, dass der Dialog wie erwartet funktioniert, vergewissern Sie sich, dass Sie die neuesten Versionen von jQuery und jQuery UI verwenden und ein jQuery UI Theme enthalten.

Hier ist ein Beispiel, in dem alles über Google CDN geladen wird:

%Vor%

Fügen Sie diese in die <head> Ihres HTML ein. Das Ergebnis sollte so aussehen . Wenn nicht, können Sie ein paar Dinge ausprobieren:

  • Sehen Sie sich die JavaScript-Konsole Ihres Browsers an (jeder moderne Browser hat einen; Google it).
  • Probieren Sie einen anderen Browser aus.
  • Versuchen Sie eine andere Methode zum Laden der Seite (z. B. via file:// vs. via localhost ).
  • (Extremfall :) Versuchen Sie einen anderen Computer und eine andere Internetverbindung.

Wenn keiner von denen funktioniert, tut es mir leid zu sagen, aber ... "du machst es falsch". :-P

Beachten Sie, dass das obige Snippet das standardmäßige jQuery UI-Theme mit dem Namen "base" enthält. Wenn es nicht Ihren Anforderungen entspricht, können Sie Google CDN für einige andere Standardthemen verwenden (siehe Blogpost ), oder Sie können Ihr eigenes Thema mit ThemeRoller erstellen.

Bearbeiten:

Um sicherzustellen, dass der Dialog den Fokus behält (und somit geschlossen wird, wenn der Benutzer ESC drückt, selbst wenn der Benutzer irgendwo anders auf der Seite geklickt hat), setzen Sie modal auf true:

%Vor%

jsFiddle: Ссылка

Normalerweise kann der Benutzer weiterhin mit anderen Elementen auf der Seite interagieren (und folglich können diese Elemente den Fokus außerhalb des Dialogs abrufen). Wenn die Option modal auf true gesetzt ist, kann der Benutzer nicht mehr mit dem Rest der Seite arbeiten und der Dialog behält den Fokus, egal was passiert.

Hoffe, das hilft.

    
PPvG 02.01.2012, 12:24
quelle
2

versuche% $("#dialog").close(); anstelle von $("body").unbind("keyup.myDialog");

zu verwenden     
redmoon7777 02.01.2012 11:58
quelle
0
%Vor%

versuche mit $ (this) .dialog ("destroy"); anstelle von $ (this) .dialog ("close");

    
vipinlalrv 28.02.2018 06:19
quelle