By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
459,869 Members | 1,756 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 459,869 IT Pros & Developers. It's quick & easy.

Dynamische Tabellen -> Zellfarben per JS -> history.back

P: n/a
Hi *,

ich erzeuge zur Laufzeit in einer ASP-Tabelle Tabellenzellen. Im Großteil
dieser Zellen befinden sich Checkboxes. Per JS ändere ich beim Click auf
eine solche Zelle oder deren Checkbox die Farbe der Zelle. Problem: Bei
einem history.back (oder Back-Button am Client) gehen die Client-seitig
geänderten Zellfarben verloren. Ich suche nun einen möglichst performanten
Weg, diese per StartupScript dort wiederherzustellen.
Mein letzter Versuch war das Durchlaufen der Zellen per:
for (var i=0; i<document.getElementsByTagName(""td"").length; i++) {...}
Für einen Vergleich müsste ich prüfen, ob eine Checkbox darin enthalten ist
und dann den Status dieser Checkbox abfragen - das bekomme ich nicht hin.
Andererseits könnte ich mir vorstellen, dass aufgrund der möglichen Anzahl
der Checkboxes dies relativ langsam werden würde.

Sprich - gibt es a) Alternativen zu einer Schleife über alle Zellen
und/oder gibt es einen passenderen Weg, dies anzugehen?

TIA & Gruß,
Olaf
--
My .02: www.Resources.IntuiDev.com
Nov 20 '06 #1
Share this Question
Share on Google+
3 Replies


P: n/a
Hallo Olaf,

Olaf Rabbachin wrote:
Hi *,

ich erzeuge zur Laufzeit in einer ASP-Tabelle Tabellenzellen. Im Großteil
dieser Zellen befinden sich Checkboxes. Per JS ändere ich beim Click auf
eine solche Zelle oder deren Checkbox die Farbe der Zelle. Problem: Bei
einem history.back (oder Back-Button am Client) gehen die Client-seitig
geänderten Zellfarben verloren. Ich suche nun einen möglichst performanten
Weg, diese per StartupScript dort wiederherzustellen.
Mein letzter Versuch war das Durchlaufen der Zellen per:
for (var i=0; i<document.getElementsByTagName(""td"").length; i++) {...}
Für einen Vergleich müsste ich prüfen, ob eine Checkbox darin enthalten ist
und dann den Status dieser Checkbox abfragen - das bekomme ich nicht hin.
Andererseits könnte ich mir vorstellen, dass aufgrund der möglichen Anzahl
der Checkboxes dies relativ langsam werden würde.

Sprich - gibt es a) Alternativen zu einer Schleife über alle Zellen
und/oder gibt es einen passenderen Weg, dies anzugehen?

TIA & Gruß,
Olaf
Du hast den grössten Nachteil von JavaScript auf Web Applikationen
entdeckt: Den "Back" button geht kaputt, wenn man mit JavaScript den
Inhalt der Seite modifiziert. Das ist auch wahr in AJAX, und natürlich
hier in DHTML auch.

Deine Idee ist gut und soll funktionieren. Es ist wahr, dass es am
Anfang ein bisschen zeit braucht, ich denke aber, dass es nicht so
schlimm wird. Um sicher zu sein muss man aber testen.

Du musst vermeiden, jedes Mal document.getElementsByTagName aufzurufen,
das braucht zu viel Zeit und ist nicht nötig. Du musst die Methode nur
einmal aufrufen, und das Ergebnis speichern:

var anTds = document.getElementsByTagName( "td" );
for ( var index = 0; index < anTds.length; index++ )
{
// ...
}

Wenn du die TD hast kannst du die childNodes collection überprüfen, und
schauen, ob da eine Checkbox gefunden wird.

Der Style der TDs kann aber auch auf dem Server gesetzt werden. Da du
einen Roundtrip hast werden die Werte der Checkboxes am Server
übermittelt. Dort kannst du dynamisch den Style setzen.

HTH,
Laurent
--
Laurent Bugnion, GalaSoft
Software engineering: http://www.galasoft-LB.ch
Private/Malaysia: http://mypage.bluewin.ch/lbugnion
Support children in Calcutta: http://www.calcutta-espoir.ch
Nov 20 '06 #2

P: n/a
Hi Laurent,

Laurent Bugnion wrote:
Du musst vermeiden, jedes Mal document.getElementsByTagName aufzurufen,
das braucht zu viel Zeit und ist nicht nötig. Du musst die Methode nur
einmal aufrufen, und das Ergebnis speichern:

var anTds = document.getElementsByTagName( "td" );
for ( var index = 0; index < anTds.length; index++ )
{
// ...
}
darauf hätte ich wohl schon kommen können. :-)
Wenn du die TD hast kannst du die childNodes collection überprüfen, und
schauen, ob da eine Checkbox gefunden wird.
Klasse, das war der "missing link" - hab's hinbekommen.
Der Style der TDs kann aber auch auf dem Server gesetzt werden. Da du
einen Roundtrip hast werden die Werte der Checkboxes am Server
übermittelt. Dort kannst du dynamisch den Style setzen.
Im Falle des history.back habe ich ja eben *keinen* roundtrip. Die Styles
der Tabellenzellen werden server-seitig über ein .skin-File gesteuert.
Client-seitig jedoch soll eine farbliche Hervorhebung von jenen Zellen
erfolgen, die der Benutzer manipuliert hat (und was nun auch funktioniert).
Das halte ich für nötig, weil sich in dem Form (kalendarische Übersicht),
je nach Anwendungseinstellung, durchaus 150 Boxen befinden können. Der
Benutzer will dann in aller Regel nur ein paar anklicken - das farbliche
Hervorheben bringt da eine wesentlich bessere Übersichtlichkeit. Sprich, es
geht rein um die client-seitige Anpassung.

Danke auch! :-)

Gruß,
Olaf
--
My .02: www.Resources.IntuiDev.com
Nov 21 '06 #3

P: n/a
Hi,

Olaf Rabbachin wrote:

FYI - sorry for the German, I just recognized that I actually posted to the
wrong NG! This posting was really meant to be sent to a German ASP.net
group!

So here's the translation for the original posting:

--- 8< ---
at runtime I create cells within an ASP-table. In most of these cells
there'll be a checkbox-control. Via JS I'm changing a checkbox's
parent-cell's backcolor. The problem comes with history.back (or the user
clicking the back-button): the changed colors will be reset to their
original color (coming from a skin-file). I'm looking for a (possibly well
performing) way to restore those colors, i.e. using a StartupScript.

My last approach was to loop through all cells using:
for (var i=0; i<document.getElementsByTagName(""td"").length; i++) {...}
For a comparison I need to check as to whether there's a checkbox within
the so found cells, which I couldn't succeed in.
Also, looping through all controls could, due to the potentially large
count of checkboxes (up to ~100) impose a performance-problem which is why
I'd like to see whether there's any alternative to the loop-approach.

So - is there a) alternatives to looping through all table-cells and/or a
more appropriate approach?
--- 8< ---

Laurent then gave me hints concerning using a variable for the
cells-collection plus the childNodes-collection that I now utilized in
order to identify table-cells with checkboxes, so - with a loop -
everything's working as should now. If there's a more appropriate approach,
let me know!

Cheers,
Olaf
--
My .02: www.Resources.IntuiDev.com
Nov 21 '06 #4

This discussion thread is closed

Replies have been disabled for this discussion.