Javascript

Javascript-Schleifen visualisieren

Vor Kurzem habe ich an der Verarbeitung einer recht umfangreichen Tabelle per Javascript gearbeitet und dabei tat sich das Problem auf, wie ich dem Benutzer am einfachsten den Fortschritt visualisieren konnte.

Gegeben war eine Tabelle mit zwei Spalten. Die erste namens nr, beinhaltete die laufende Nummer des Eintrags und die zweite, namens entry, den zu verarbeitenden Wert. Jede Zelle besaß eine eindeutige ID, die ebenfalls die fortlaufende Nummer enthielt, um die einzelnen Zellen darüber ansprechen zu können:

<input id="txtCount" type="hidden" value="..."/>
<span id="lblProcess" />
<table>
	<tr>
		<td id="nr_1">1</td>
		<td id="entry_1">...</td>
	</tr>
	<tr>
		<td id="nr_2">2</td>
		<td id="entry_2">...</td>
	</tr>
	...
</table>

Meine Idee war nun, ein über der Tabelle befindliches Label mit der Nummer des aktuell zu verarbeitenden Eintrags zu aktualisieren..

(Der folgende Code setzt auf dem freien Javascript-Framework jQuery auf)

function processTableData() {

	// Anzahl der zu verarbeitenden Einträge ermitteln
    var iCount = parseInt($("#txtCount").val());

    // Schleifen
    if (iCount != 0) {

        for (i = 1; i < (iCount + 1); i++) {

        	// aktualisieren des Labels
        		$("#lblProcess").html('Verarbeitung von Eintrag ' + i);

        	// Verarbeitung durchführen
        	//...
        }
    }
}

Das Ganze hatte leider einen Haken: die Browser arbeiten immer erst eine Javascript-Operation komplett ab, bevor sie den Inhalt der Seite neu rendern, d.h. die Methode lief durch und das Label wurde erst am Ende mit dem letzten Eintrag aktualisiert. Nicht wirklich der Sinn eines Fortschrittsanzeigers.

Da Javascript leider keine Methode kennt, mit man das Rendern erzwingen kann, war nach etwas Recherche der einzige Ansatz die setTimeout-Methode, denn diese führt nach einer bestimmten Verzögerungszeit die übergebene Methode aus. Die Schleife setzt im Prinzip nur Funktionsaufrufe ab, die zur angegebenen Zeit ausgeführt werden.

function processTableData() {

	// Anzahl der zu verarbeitenden Einträge ermitteln
    var iCount = parseInt($("#txtCount").val());

    // Schleife
    if (iCount != 0) {

        for (i = 1; i < (iCount + 1); i++) {

        	setTimeout('doProcess(' + i + ')', 20 * (i+1));

        }
    }
}

function doProcess(i) {

	// aktualisieren des Labels
	$("#lblProcess").html('Verarbeitung von Eintrag ' + i);

	// Verarbeitung durchführen
	//...

}

Der Trick an der Lösung ist nun, dass jeder Aufruf von setTimeout eine um i versetzte Startzeit erhält. Der erste Aufruf läuft nach 20 Millisekunden los, der zweite nach 40, der dritte nach 60 und so weiter. In der Zeit zwischen den Aufrufen hat der Browser Zeit das Label zu aktualisieren.

Resultat ist, dass im Label die fortlaufende Nummer durchrattert und der Benutzer ein Gefühl dafür bekommt, wie lange es noch dauert.

kick it on dotnet-kicks.de AddThis 0 wikio-Stimme(n) Trackback-Url...

207 Kommentare bislang...

  • There was so little hint of the aristocrat in cheap sale uk
    Lemuel Shackford's sordid life and person that no one suspected him of even self-esteem. He went as meanly dressed as a tramp, and as cheap trainers
    careless of contemporary criticism; yet clear down in his liver, or somewhere in his anatomy, he nourished an odd abstract pride in the family Shackford. Heaven knows why! To be sure, it dated far back; its women had always been virtuous, boots and trainers sale and its men, if not always virtuous, had always been ship-captains.
    207
    boots and trainers sale : Freitag, 3. Februar 2012 03:48
  • <a href=" http://www.wholesale-jersey-store">Cheap NFL Jerseys</a>
    <a href=" http://www.wholesale-jersey-store">Cheap NFL Jerseys</a>
    <a href=" http://www.wholesale-jersey-store">Cheap NFL Jerseys</a>
    206
    Cheap NFL Jerseys : Mittwoch, 1. Februar 2012 03:13
  • But the absolute aberration was demography the pants home Real Jordans for sale, acid off the tags and again chief they don't absolutely fit Air Rreto Jordan 4 Cheap Sale. Now I'm ashore with them, and admitting accepting spent the bigger allotment of this anniversary aggravating to argue myself that they're okay Real retro 10 jordan, I apperceive I am a liar.
    205
    Real Jordans : Freitag, 20. Januar 2012 01:13
  • In fact, most of the companies that sell these Jordan clearance sale amazing shoes will normally have web sites and online portals through which potential clients can review the available merchandise and make their orders Jordan 6 Outlet Store.

    204
    Jordans Outlet : Freitag, 20. Januar 2012 01:10
  • cheap louis vuitton 2012 new bags is save 90% off, it sale in the cheaplouisvuitton2012. it is Professional. welcome to our store.
    203
    cheap louis vuitton : Sonntag, 15. Januar 2012 13:51

Dein Kommentar hierzu...


Kommentar-Feed für diesen Beitrag
Gravatare werden unterstützt .:. eMail-Adressen werden nicht veröffentlicht
 

RSS-Feed

Die URL des Standard-Newsfeed von zerbit.de lautet:

http://www.zerbit.de/rssfeed.aspx

Login


 

 

Statistik



kürzlich kommentiert

Artikel 262

  • Datum: 31.05.2008
    Kategorie: Javascript
    Zugriffe: 5.274
    Kommentare: 207
    Trackbacks: 0

Letzte Beiträge

Kategorien

Buttons & More

Blog-Roll

Banner Piraten-Partei