Raga ho risolto, vi spiego se dovesse servire a qualcun altro, il problema era dato dal "remove" della option:
quando si elimina una option viene tolto un elemento dall'array e di conseguenza si spostano gli indici di tutti i successivi elementi !!
La mia soluzione è quindi di usare due cicli, uno che prima inserisce gli elementi nella seconda select, il secondo che li toglie dalla prima...a ritroso.
Magari c'è un metodo anche più veloce ... ma almeno ora funzionacodice:for(i=0; i<origine.options.length;i++){ if(origine.options[i].selected==true){ var elNew = document.createElement('option'); elNew.text = origine.options[i].text; elNew.value = origine.options[i].value; try {destinazione.add(elNew, null); } // standards compliant; doesn't work in IE catch(ex) {destinazione.add(elNew); } // IE only } } for(i=origine.options.length-1; i>=0;i--){ if(origine.options[i].selected==true) origine.remove(i);![]()