Litet exempel, tillägget är alltså functionen sync och anropet till den.
<script type="text/javascript">
function moveSelectedOptions(from,to) {
// Unselect matching options, if required
if (arguments.length>3) {
var regex = arguments[3];
if (regex != "") {
unSelectMatchingOptions(from,regex);
}
}
// Move them over
for (var i=0; i<from.options.length; i++) {
var o = from.options[i];
if (o.selected) {
to.options[to.options.length] = new Option( o.text, o.value, false, false);
}
}
// Delete them from original
for (var i=(from.options.length-1); i>=0; i--) {
var o = from.options[i];
if (o.selected) {
from.options[i] = null;
}
}
if ((arguments.length<3) || (arguments[2]==true)) {
sortSelect(from);
sortSelect(to);
}
from.selectedIndex = -1;
to.selectedIndex = -1;
}
function sortSelect(obj) {
var o = new Array();
if (obj.options==null) { return; }
for (var i=0; i<obj.options.length; i++) {
o[o.length] = new Option( obj.options[i].text, obj.options[i].value, obj.options[i].defaultSelected, obj.options[i].selected) ;
}
if (o.length==0) { return; }
o = o.sort(
function(a,b) {
if ((a.text+"") < (b.text+"")) { return -1; }
if ((a.text+"") > (b.text+"")) { return 1; }
return 0;
}
);
for (var i=0; i<o.length; i++) {
obj.options[i] = new Option(o[i].text, o[i].value, o[i].defaultSelected, o[i].selected);
}
}
function sync(list,field){
field.value="";
for(var n=0;n<list.length;n++){
field.value+=(field.value)?", "+list[n].text:list[n].text;
}
}
</script>
<form>
<select name="foo" style="width:150px;" size="3">
<option value="Anders">Anders</option>
<option value="Bertil">Bertil</option>
<option value="Cesar">Cesar</option>
</select>
<input type="button" value=">>" onclick="moveSelectedOptions(this.form.foo,this.form.bar); sync(this.form.bar,this.form.faa);">
<input type="button" value="<<" onclick="moveSelectedOptions(this.form.bar,this.form.foo); sync(this.form.bar,this.form.faa);">
<select name="bar" style="width:150px;" size="3">
</select>
<input type="hidden" name="faa">
</form>
Functionen använder alltså listans "text". Vill du hellre använda listans value ändrar du list[n].text till list[n].value