La respuesta de @ Piyush me pareció útil, y solo para agregarle, si crea programáticamente una selección, entonces hay una manera importante de obtener este comportamiento que puede no ser obvio. Digamos que tiene una función y crea una nueva selección:
var changeitem = function (sel) {
console.log(sel.selectedIndex);
}
var newSelect = document.createElement('select');
newSelect.id = 'newselect';
El comportamiento normal puede ser decir
newSelect.onchange = changeitem;
Pero esto realmente no le permite especificar el argumento pasado, por lo que puede hacer esto:
newSelect.setAttribute('onchange', 'changeitem(this)');
Y puedes configurar el parámetro. Si lo hace de la primera manera, entonces el argumento que obtendrá sobre su onchange
función dependerá del navegador. La segunda forma parece funcionar bien en todos los navegadores.