2009-07-14 10 views
0

im Hintergrund fehl Ich habe Probleme mit IE6 und jQuery UI. Ich habe einen Popup-Dialog (modal, falls es darauf ankommt), der dem Benutzer einen "Ja/Nein" -Dialog mit einigen Informationen anzeigt. Um dies zu erleichtern, erstelle ich den Dialog mit autoOpen = false und rufe später $ ('# popup'). Show() als Reaktion auf verschiedene Ereignisse auf. Jetzt, in IE6 (und nur IE6, soweit ich das beurteilen kann), wird die .dialog-Methode gelegentlich fehlschlagen, aber STILL das jQuery-Objekt zurückgeben. Anstatt also ein Popup anzuzeigen, zeigt die .show() -Methode nur einen div-Container in der HTML-Seite an.jQuery UI .dialog() -Methode schlägt in IE6

Was könnte die Ursache sein, und wie ich dieses Problem beheben?

Danke.

$('#myDialog').dialog({ 
      autoOpen: false, 
      buttons: { 
       "No": function() 
       { 
        $(this).dialog('close'); 
        //do stuff 
       }, 
       "Yes": function() 
       { 
        $(this).dialog('close'); 
        //do stuff 
       } 
      }, 
      draggable: false, 
      modal: true, 
      resizable: false, 
      title: "Confirmation", 
      width: "500px", 
      zIndex: 2000 
     }); 

und später

$('#myDialog').dialog('open').show(); 

Ziemlich Standard.

Neue Informationen

ich die Seite bin Laden, die den Dialog mit Ajax innerhalb eines anderen Dialog macht, die immer wieder erstellt werden kann und zerstört. Jedes Mal, wenn meine Seite mit Ajax geladen wird, sollte .dialog (opts) den Dialog div erneut instanziieren, richtig? Ich habe festgestellt, dass dies das Szenario ist.

1.) Ein äußerer Dialog verwendet Ajax seinen Inhalt mit meinem Gehalt zu ersetzen.

2.) Mein Inhalt startet einen Dialog, der zuvor erstellt wurde und auf nicht AutoOpen-.

3.) Die äußere Dialog zerstört wird als der innere Dialog geschlossen.

4.) Der äußere Dialog wird erneut geöffnet. Der innere Dialog kann nicht mehr als Dialog in ie6 erscheinen. Dies geschieht NUR in IE6.

+0

ein Link/Screencasts der Ausgabe, oder vielleicht würde das Skript zeigt helfen – redsquare

Antwort

1

Ich hatte eine ähnliche Situation und war nie in der Lage den Dialog wieder zu verwenden. Ich musste beide Dialoge jedes Mal zerstören und neu erstellen.

+0

Zerstören und neu erstellen scheint mit dem Verhalten der "modalen" Dialoge zu verwirren. Wie in, wird das graue Dimmbit nicht entfernt. Vielleicht schließen und zerstören? Ich denke, ich werde das versuchen. –

+0

Ich habe das gerade wiederholt, da es die einzig mögliche Lösung zu sein schien, und ich habe es in der zweiten Runde durchgearbeitet. Ich dachte, dass verrücktes Krachen falsches Verhalten sein musste: P. Vielen Dank! –

6

sollten Sie öffnen Ihren Dialog mit

$('#myDialog').dialog('open'); 

statt

$('#myDialog').show(); 

Die erste Methode zeigt aktuelles Dialogfeld, während die, die Sie gerade verwenden bewirkt, dass die #myDialog Elemente angezeigt werden (mit kein UI Dialog magic). show() Methode ist der Teil der Core jQuery-Bibliothek und sollte nicht verwendet werden, um einen Dialog aufzurufen.

+0

Mein Fehler. Ich habe mich geirrt. Ich benutze $ ('# blah'). Dialog ('open') .show(); Der Inhalt ist verborgen, bis der Dialog erstellt wird. –

+0

Sie müssen die show() - Methode nach dem Dialog nicht ausführen ('öffnen'), der Dialog 'Benutzeroberfläche' wird automatisch den Inhalt von $ ('# blah') sichtbar machen. – RaYell

+0

Nein, wird es nicht. Zumindest nicht in irgendeiner IE-Variante. Ich habe dieses Szenario gründlich getestet. –

1

Ich benutze das bgiframe: true, und ich habe nie ein Problem mit ihnen mit I6, FFox usw.

Weitere Informationen: http://docs.jquery.com/UI/Dialog#option-bgiframe

Grüße.

+0

Ich hatte bgiframe seit Beginn der Entwicklung. Kein Würfel. –

+1

Jeder, der dies liest: bgiframe ist essentiell für ie6 und jquery-ui. Das hat nichts mit meinem Problem zu tun, aber Sie werden Kopfschmerzen ohne bgiframe bekommen. –

1

By the way, wenn Sie Ihre modal verstecken, bevor Sie es öffnen, verwenden Sie style = „display: none“ als Versteck Attribut oder einer CSS-Klasse oder jquery?

Der Grund, warum ich frage, ist, dass, wenn Sie einfach verwenden style = "display: none" Ich habe nie Probleme mit dem Modal zeigt das modal perfekt die ganze Zeit mit Dialog ("open"), aber wenn ich entweder CSS oder jquery, ich habe immer Probleme.

Sie möchten es vielleicht testen.

Marcus