2009-09-25 13 views
6

Wenn ich einen modalen JQuery-Dialog in IE8 öffnen, geht meine CPU-Auslastung zu 100% (Nein, eigentlich 50, aber das ist 100% von einem Kern). Wenn ich Entwicklerwerkzeuge knacke, scheint es, dass es viele Größenänderungsereignisse sind, die feuern (ich mache keine freiwillige Größenänderung). Ist jemand anderes auf dieses Problem gestoßen und weiß, wie er es beheben kann?JQuery UI Modal Dialog verwendet 100% CPU

Antwort

11

Die Lösung ist dies auf Ihre CSS-Datei hinzufügen:

.ui-widget-overlay { 
    position: fixed; 
} 

reference

+0

Entschuldigung für die Annahme meiner eigenen Antwort, aber ich denke, es ist die beste Lösung. Nicht von IE6 unterstützt, aber IE6 hat sowieso einen anderen Codepfad im entsprechenden jQuery-Code (und ich weiß nicht, ob es ein Problem gibt). – erikkallen

+0

Das hat es für mich behoben! Verwenden von JQuery 1.6 und JQuery UI 1.8.13. Die modalen Dialoge verursachten 100% CPU-Auslastung in IE7. Es konnte nicht die Höhe des Überlagerungs-DIV bestimmen, das im 'Modal'-Verhalten verwendet wird. Das Hinzufügen zum CSS behebt meine Probleme. Vielen Dank! – Sentient

+0

Fixed für mich auf IE7. Du bist ein Lebensretter! – Nils

4

Ich habe gesehen, wie Dinge passieren, wenn etwas einen Container mit 100% Breite und Höhe füllt, und dieser Container hat einen Überlauf: auto. Dadurch springt es endlos hin und her und versucht, in den Container zu passen, aber dann fügt der Container Bildlaufleisten hinzu oder entfernt sie. Ich weiß nicht, ob das auf Ihre Situation zutrifft, aber vielleicht etwas Ähnliches.

+0

Was meinen Sie mit dem Befüllen eines Containers? Es erscheinen Scrollbalken auf dem Dokument für mich, wenn ich den Dialog öffne, so dass Sie wahrscheinlich zumindest teilweise Recht haben. Der Körper ist jedoch nicht einmal annähernd mit Dingen gefüllt. – erikkallen

+0

Ich meine, wenn ein inneres Element die gleiche Größe wie ein Elternelement hat (oder etwas größer ist). Wenn Sie Bildlaufleisten sehen, sieht es so aus, als ob Ihnen das passiert. Sie müssen herausfinden, welches Element dies tut, und es so gestalten, dass es kleiner bleibt als das Elternelement. Die CPU-Auslastung ist auf den wiederholten Reflow zurückzuführen, der auftritt, wenn Bildlaufleisten wiederholt hinzugefügt und entfernt werden. Sie könnten den Body einfach überlaufen lassen: Er wird ausgeblendet, während das Dialogfeld angezeigt wird, und dann wieder zurück zu dem, was er nach dem Schließen war. – lod3n

+0

Danke. Diese Lösung funktioniert, ist aber ein wenig zu schwerfällig (denke geschachtelte Dialoge). Ich werde es akzeptieren, wenn niemand eine bessere Idee hat. – erikkallen