anc'io ho provato ma girala o menala la minestra è sempre quella, l'effetto deseleziona/riseleziona non si può evitare in nessun modo.

codice:
<html>
<head>
<title>Documento senza titolo</title>
<meta http-equiv="Content-Type" content="x-gzip">
</head>

<body>
<hr>
<SCRIPT LANGUAGE="JavaScript">
var arrSelected = new Array();
function DoSelect(objSelect){
	objSelect.blur();
	objSelect.focus();
	var iObjSelectNumElements = objSelect.length;
	// ripristino i valori selezionati nella lista prendendoli dall'array	
	for(var i = 0; i < iObjSelectNumElements; i++)
	{
		objSelectedOption = objSelect.options[i];
		switch(objSelectedOption.selected)
		{
			case true:
				if (arrSelected[i] != undefined) // se è già presente nell'array disabilito l'opzione
				{
					objSelect.options[i].selected = false;
					arrSelected[i] = undefined; // imposto lo stato nell'array ad undefined
				}
				else // non è presente nell'array: abilito l'opzione
				{
					objSelect.options[i].selected = true; // abilito la voce della select
					arrSelected[i] = i; // imposto l'indice nell'array
				}
				break;
			default:
				if(arrSelected[i] != undefined) // se è già presente nell'array abilito l'opzione
				{
					objSelect.options[i].selected = true; // abilito la voce della select
					arrSelected[i] = i; // imposto l'indice nell'array
				}
				else // non è presente nell'array: disabilito l'opzione
				{
					objSelect.options[i].selected = false;
					arrSelected[i] = undefined; // imposto lo stato nell'array ad undefined
				}		
		}
	}	
}
</SCRIPT>
<form>
   <select multiple rows=10 onClick="DoSelect(this)">
      <option value="1">1
      <option value="2">2
      <option value="3">3
      <option value="4">4
   </select>
</form>
</form>
</body>
</html>