daniel84: zwischen Auswahllisten Werte tauschen

Beitrag lesen

Hallo Markus,

Dann musst du die ausgewählten Elemente mittels for-Schlaufe durchgehen. Wie das geht, kannst du dem Quellcode meines Beispiels entnehmen. Wichtig: Mit dem höchsten Index beginnen und runterzählen, nicht umgekehrt!

nun so wie du es beschreibst hatte ich es mir auch gedacht, aber nur mal eine verständnisfrage: warum von höchsten index aus zählen?

Ok, anhand eines Beispiels: Du hast 5 Elemente mit den Indizes 0, 1, 2, 3, 4. Nun markierst du Eintrag 2 und 3, also Index 1 und 2. Wenn du nun von 0 zu zählen beginnst, läuft das in der for-Schlaufe so ab:

  • Index 0 bleibt
  • Index 1 wird gelöscht
  • vorher markierter Index 2 ist jetzt Index 1, da ja die vorherige Option gelöscht wurde!

Und das gibt dann unerwünschte Effekte, d.h. es wird ein falscher Eintrag gelöscht. Deshalb beginnst du mit dem höchsten Index und löschst quasi "von hinten nach vorne", da dann das wegfallen eines Eintrages keinen Einfluss auf die Indizes der anderen Einträge hat.

stimmt, jetzt hab ich es verstanden, aber nochmal eine frage^^

wenn ich mehrere einträge markiere und in die andere auswahlliste verschiebe, dann werden diese in umgedrehter reihenfolge aufgelistet. kann man das irgendwie so programmieren, dass er es in richtiger reihenfolge verschiebt? hab mir da jetzt schon die zähne ausgebissen, es ist unbedingt erforderlich für mich, das die reihenfolge erhalten bleibt.

Hm, jetzt wirds kompliziert...;-( Wahrscheinlich wäre jetzt die Lösung, dass du doch raufzählst (von 0 bis Anzahl Options), und das vorher beschriebene Problem irgendwie auffängst, z.B. mit einem zusätzlichen Counter, der die Index-Verschiebungen (durch das Entfernen) handlet...

Oder ein zweiter Ansatz: Anstatt du die Options entfernst, setzt du einfach ihren Value auf Leerstring (''). Dann fallen die Index-Verschiebungen weg, und du kannst ganz normal von 0 nach Anzahl Options zählen. Wenn dann alle selektierten Options verschoben sind, gehst du die "Quell-Auswahlliste" nochmals durch (hier unbedingt wieder vom maximalen Wert nach 0) und entfernst alle Options, deren Value '' (Leerstring) ist.

Die zweite Variante ist wohl die bessere und einfachere. Ich hoffe, du hast verstanden, was ich ausdrücken möchte - sonst einfach nochmals fragen!

Gruss aus Luzern,
Daniel