2009-03-20 14 views
0

Ich habe eine Seite, die eine Menge von Javascript-Berechnungen verwendet, wenn die Seite geladen wird. Dadurch kann die Seite abhängig von der Anzahl der ausgeführten Berechnungen für einige Minuten gesperrt werden.Feuer-Ereignis nach allem Javascript hat die Ausführung

kann ich ein jquery modal Kasten auf Seite Last öffnen. Die Berechnungsfunktionen feuern dann und dann, wenn sie fertig sind, sollten sie die modale Box schließen.

Das Problem der Box fast sofort endet, nachdem er angezeigt wird. Der Code, den ich verwende, ist hier:

// In page startup functions 
$(document).ready(function() { 
    // Initialise Modal 
    $('#dialog').jqm({ modal: true }); 
    // Show Modal box 
    $('#dialog').jqmShow(); 
    // Call all the startup functions and then hide the modal box 
    // once they have all completed. 
    StartUpCall((function() { $('#dialog').jqmHide(); })()) 
}); 

Gibt es ein Ereignis, das jQuery einmal alle feuert Javascript abgeschlossen ist? Das wäre der erste Preis für mich.

Edit: Ich bin mit jqModal - http://dev.iceburg.net/jquery/jqModal/

Antwort

0

Ich bin nicht sicher, ob ich Ihre Frage, und der Titel ist auch verstehen, verwirrend. Sind Sie sicher, dass die Berechnungen synchron ausgeführt werden? Verwenden Sie Ajax-Anrufe? Wenn ja, wird der Versteckruf ausgeführt, bevor die Berechnungen abgeschlossen sind.

Wie auch immer, unterstützt jQuery benutzerdefinierte Ereignisse, die Sie und programmatisch auslösen erstellen können. Sehen Sie sich zum Beispiel link an. Dies wäre eine elegante Lösung für Ihre Situation. Da Sie auch Parameter mit den Ereignissen senden können, können Sie auch den Status des modalen Dialogs einfach aktualisieren.

+0

Ich habe den Titel geändert. Ich hoffe, das ist klarer. Ich benutze keinen Ajax. –

1

würde ich eine globale Variable und eine Callback-Funktion verwenden. Die globale Variable ist entweder ein Zähler oder ein Array von Strings. Zu Beginn jeder Berechnung erhöhen Sie entweder den Zähler oder fügen dem Array eine eindeutige Zeichenfolge hinzu, und am Ende jeder Berechnung dekrementieren Sie den Zähler oder entfernen Sie die eindeutige Zeichenfolge, und rufen Sie eine Funktion auf, die nach Zähler == 0 oder array.length sucht == 0, an diesem Punkt verstecken Sie Ihren Dialog.

0

Nachdem Sie den modalen Dialog auftauchen, verwenden Sie einen setTimeout() Ihre prozessorintensiven Code aufzurufen. Die Verstecke sollte am Ende dieses Codes sein (der Prozessor-intensive Code, nicht der aufrufende Code). Sie können 0 für die Verzögerung in setTimeout verwenden. Nur ein Thread von JavaScript wird ausgeführt (WebWorker ignorierend).

Beachten Sie, dass verschiedene Browser unterschiedliche Toleranz für wie lange sie das Skript ausführen lassen, bevor sie eine "Skript nicht reagierende" Warnung auslösen. Möglicherweise müssen Sie Ihre Berechnungen in Stücke zerlegen, die von setTimeout gestartet werden. IIRC, IE6 (mit einem schmerzhaft langsamen JS, das das Problem noch verschlimmert) wird sehr schnell ausfallen.

Verwandte Themen