Sir Robin
Erfahrenes Mitglied
Tachchen,
ich häng jetzt schon ne ganze Weile an einem Code, mit dem ich Listenfelder manipulieren kann. Manipulieren heißt in dem Fall Einträge nach oben bzw. unten verschieben. Das an sich ist ja kein großes Problem, und das hab ich auch schon gelöst. Ein viel größeres Problem ist, das es Gruppen gibt, und die auch verschoben werden sollen.
Also es sieht praktisch so aus:
Gruppe 1
--Eintrag 1.1
--Eintrag 1.2
--Eintrag 1.3
Gruppe 2
--Eintrag 2.1
--Eintrag 2.2
Gruppe 3
--Eintrag 3.1
--Eintrag 3.2
--Eintrag 3.3
--Eintrag 3.4
...problemlos klappt es, wenn alle Gruppen gleich groß sind, sprich die selbe Anzahl von Einträgen haben. Sobald die sich jedoch unterscheiden, dann kommt das Script ab und zu mal durcheinander. Leider hab ich überhaupt keinen Ansatz bisher gefunden, bis auf ein Workaround über Arrays, was ich allerdings ungern verwirklichen will...
die HTML mit JavaScript (wird bisschen viel Code):
vielleicht hat ja jemand nen Tipp...danke schonmal!
ich häng jetzt schon ne ganze Weile an einem Code, mit dem ich Listenfelder manipulieren kann. Manipulieren heißt in dem Fall Einträge nach oben bzw. unten verschieben. Das an sich ist ja kein großes Problem, und das hab ich auch schon gelöst. Ein viel größeres Problem ist, das es Gruppen gibt, und die auch verschoben werden sollen.
Also es sieht praktisch so aus:
Gruppe 1
--Eintrag 1.1
--Eintrag 1.2
--Eintrag 1.3
Gruppe 2
--Eintrag 2.1
--Eintrag 2.2
Gruppe 3
--Eintrag 3.1
--Eintrag 3.2
--Eintrag 3.3
--Eintrag 3.4
...problemlos klappt es, wenn alle Gruppen gleich groß sind, sprich die selbe Anzahl von Einträgen haben. Sobald die sich jedoch unterscheiden, dann kommt das Script ab und zu mal durcheinander. Leider hab ich überhaupt keinen Ansatz bisher gefunden, bis auf ein Workaround über Arrays, was ich allerdings ungern verwirklichen will...
die HTML mit JavaScript (wird bisschen viel Code):
PHP:
<script language="JavaScript">
<!--
//Festlegen der Anzahl der Einträge für die jeweilige Gruppe
eintrag = new Array();
eintrag[1] = 3;
eintrag[2] = 2;
eintrag[3] = 4;
//Funktion zum Hochschieben von Einträgen (sowohl Gruppen, als auch einzelne Beiträge)
function up(){
//Feldnamen speichern
feld = document.formular.liste.options;
//Alten Index festlegen
old_index = feld.selectedIndex;
//Fehler abfangen, wenn man nicht mehr höher schieben kann
if(old_index == 0) {
return false;
}
//Nächst-Höheren Kursindex herausfinden
for(i = old_index - 1; i >= 0; i--) {
anfang = feld[i].text.substr(0,2);
if(anfang != '--') {
new_index = i;
break;
}
}
//Checken ob nur Eintrag oder ganze Gruppe verschoben werden soll
teil = feld[old_index].text.substr(0,2);
//Nur Eintrag
if(teil == '--') {
//Checken ob man noch weiter nach oben schieben kann
if(old_index - 1 == new_index) {
return false;
} else {
new_index = old_index - 1;
//Alte und neue Inhalte zwischenspeichern
old_content = feld[old_index].text;
old_value = feld[old_index].value;
new_content = feld[new_index].text;
new_value = feld[new_index].value;
//Werte tauschen
feld[old_index].value = new_value;
feld[old_index].text = new_content;
feld[new_index].value = old_value;
feld[new_index].text = old_content;
//Fokusieren
feld.selectedIndex = new_index;
}
//Gruppe verschieben
} else {
//Anzahl aus Array bekommen
anzahl = eintrag[feld[old_index].value];
//Und los, verschieben der Einträge
for(i = 0; i < anzahl; i++) {
//Alte und neue Inhalte zwischenspeichern
old_content = feld[old_index].text;
old_value = feld[old_index].value;
new_content = feld[new_index].text;
new_value = feld[new_index].value;
//Werte tauschen
feld[old_index].value = new_value;
feld[old_index].text = new_content;
feld[new_index].value = old_value;
feld[new_index].text = old_content;
//Zähler erhöhen
new_index++;
old_index++;
}
//Fokussieren
feld.selectedIndex = new_index - i;
}
}
-->
</script>
//...
<form name="formular">
<select name="liste" size="12">
<option value="1">Gruppe 1</option>
<option value="1">-- Eintrag 1.1</option>
<option value="2">-- Eintrag 1.2</option>
<option value="3">-- Eintrag 1.3</option>
<option value="2">Gruppe 2</option>
<option value="3">-- Eintrag 2.1</option>
<option value="4">-- Eintrag 2.2</option>
<option value="3">Gruppe 3</option>
<option value="5">-- Eintrag 3.1</option>
<option value="6">-- Eintrag 3.2</option>
<option value="7">-- Eintrag 3.3</option>
<option value="8">-- Eintrag 3.4</option>
</select>
<input name="hoch" type="button" value="hoch" onClick="up()">
</form>
vielleicht hat ja jemand nen Tipp...danke schonmal!
Zuletzt bearbeitet: