Selektierte Elemente bei multi select unter Opera ermitteln
Claus Peter
- javascript
0 shirinka0 Claus Peter
Hallo,
wenn ich mit Javascript auf ein Multiselect unter Opera 7.21 zugreife
function GetSelected(pFormElt) // pFormElt == Select
{
var i;
var aSelected = new Array();
// get selected elts
for(i=0; i<pFormElt.options.length; i++)
{
aSelected[i] = pFormElt.options[i].selected;
}
}
dann werden mir nicht nur die aktuell markierten Einträge als "true" ausgegeben, sondern auch die Einträge, die vorher markiert waren.
Beispiel: beim Seitenaufbau sind die Elemente 1, 4, und 5 selektiert. Ich klicke auf Element 2, jetzt ist nur Element 2 markiert. Das obige Script liefert aber als Ausgabe 1, 2, 4 und 5. Beim Absenden aber wird nur Element 2 gepostet. IE funktioniert einwandfrei.
Was mache ich falsch?
Vielen Dank im voraus für eure Hilfe
cp
im prinzip ist es schon ok, was da steht,
bisschen verfeinern und es klappt:
1. nim die definition von deinem array (aSelected) aus der funktion raus, mach sie global
2. nach ablauf der anweisungen, die du für die bearbeitung der gewonnen werte brauchst, schreibst du neue initialisierung desselben arrays, dadurch werden alle alten werte gelöscht und du kannst dein array mit neuen werten ausfüllen
beispiel:
var aSelected = new Array();
function GetSelected(pFormElt) // pFormElt == Select
{
var i;
aSelected[0] = 5;
aSelected[1] = 4;
aSelected[2] = 3;
//mit werten wird was gemacht ....
aSelected = new Array(); //array ist jetzt wieder leer
}
Hallo Shirinka,
mir ist noch nicht ganz klar, was Du meinst.
Das Problem bei der Scripverarbeitung ist, dass die Anweisung
aSelected[i] = pFormElt.options[i].selected;
unter Opera einen falschen Wert liefert, weil
pFormElt.options[i].selected
auch die alten selektierten Einträge als "true" zurückliefert. Das habe ich mit
alert("Element: " + i + " selektiert: " + pFormElt.options[i].selected);
getestet. Mit Hilfe dieser Einträge wird dann die Liste neu aufgebaut.
Hi,
zwischenzetlich habe ich zwei Lösungen gefunden:
onClick="Dummy()"
wobei Dummy() eine leere Funktion sein kann
also so:
pOption = new Option(Wert1, Wert2, 0, Select or not);
^
|immer 0 wegen Opera, sonst Problem
pSelect.options[Element] = pOption;
Viele Grüsse
cp