Hi,
ja, das funktioniert, sehr richtig.
Aber du fügst nur options an, ich will sie auch ersetzen, ggf. auch die selektierte, und ich denke das is das FF 2.0 Problem.
Probier mal diesen Code, dann siehst du was ich meine (siehe unten).
Okay, ich denke das entfernen/ersetzen der 'seleteced' option is das was FireFox-Probleme bereitet.
Zum Hintergrund, warum ich das mache. Mein Programm zeigt u.U. lange Listen an (+1000 Zeilen), die u. a. select-Felder beinhalten (+20) => 20.000 Selectfelder. Ich will den Code bei Seitenaufbau minimieren, und zeige daher nur die selektierten Werte an. Klickt der User auf eine Selectbox, werden die anderen verfügbaren Optionen nachgeladen (ja, eine Filter Möglichkeit besteht, um nicht alle +1000 Zeilen anzuzeigen, aber wir kennen alle User die darauf pfeifen, und sagen, ich will ALLES sehen).
Okay, nun könnt ich einfach die neuen Optionen anfügen, das geht (wie dein Beispiel zeigt), aber die Optionen sind sortiert (z.B. alphabetisch). Dann würde die original selektierte Option immer ganz oben erscheinen, ggf. gegen die Sortierung.
D.h. ich müsste Optionen vor das orignale setzen (im Beispiel vor den Eintrag mit Wert "originally selected"). Sobald ich das probiere, ist der Bereich der die elektierte Option zeigen soll leer, obwohl die Optionen im Feld verfügbar sind, und auch die gewählte farbig hinterlegt ist ... nur eben erscheint sich nicht in der Box.
Verständlich?
Lösung?
Danke!
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>dynamic select field</title>
<script type="text/javascript">
function refreshSelect(selectField)
{
if(selectField.options.length > 1)
return;
// entferne alle aktuellen Optionen
for(var i = 0; i < selectField.options.length; i++)
selectField.options[i] = null;
// füge neue and
addOpt(selectField, 55, 'new 55');
addOpt(selectField, 66, 'new 66');
addOpt(selectField, 77, 'new 77');
addOpt(selectField, 88, 'new 88', false, false);
addOpt(selectField, 99, 'new 9');
// das ist der zuvor selektierte Eintrag
addOpt(selectField, 1223, 'originally selected', true, true);
}
function addOpt(el, val, text, def, sel) {
if(!text) text = val;
var o = new Option(val, text, !!def, !!sel);
el.options[el.options.length] = o;
}
</script>
</head>
<body>
<select onclick="refreshSelect(this)">
<option selected="selected" value="1223">originally selected</option>
</select>
</body>
</html>