Esto te puede dar una idea de cómo hacerlo:
Código PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title> Página nueva </title>
<meta name="Author" content="derkeNuke">
<style type="text/css">
</style>
</head>
<body onload="registrarSeleccionado('elSelect');">
<select id="elSelect" onchange="registrarCambio(this)">
<option>Uno</option>
<option selected="selected">Dos</option>
<option>Tres</option>
<option>Cuatro</option>
<option>Cinco</option>
<option>Seis</option>
</select> <br/>
<input type="hidden" name="haCambiado" value="no" id="oculto" /> <br/>
<input type="button" value="fin" onclick="alert( $('oculto').value )" />
<script type="text/javascript">
function e(q,br) {
document.body.appendChild( document.createTextNode(q) );
if(!br) document.body.appendChild( document.createElement("BR") );
}
function $(x) { return document.getElementById(x); }
function registrarCambio(sel) {
$("oculto").value = (sel.options.selectedIndex == sel.originalSeleccionado)? "no":"si";
}
function registrarSeleccionado(idSel) {
var sel = $(idSel);
sel.originalSeleccionado = sel.options.selectedIndex;
}
</script>
</body>
</html>
En FF es mucho más fácil, basta con mirar si existe el atributo
selected en la option seleccionada; pero IE cambia el código HTML al cambiar el
option seleccionado
Lo único no registra todavía eso que tú comentabas de reabrir el select y seleccionar otra vez la misma opción, al no saltar el onchange, habría que averiguarlo con onclick me temo. Quizás sea más sencillo todo con onclick.
Sólo por curiosidad, ¿qué fin tiene este código?