Probier mal diesen Code, dann siehst du was ich meine (siehe unten).
OK, sieht nach einem Bug aus. Mir fällt auch kein workaround ein, aber das gewählte Option wird trotzdem übertragen.
var o = new Option(val, text, !!def, !!sel);
Ich hab hier die Felder vertauscht.
var o = new Option(text, val, !!def, !!sel);
Struppi.