Cuando estamos perdiendo el foco del control input o select si el contenido a cambiado se dispara el evento change, en cambio para el control select se dispara cada vez que seleccionamos un nuevo item.
Confeccionaremos una página que contenga dos text y un select, mostraremos en una ventana alert el objeto que emite el evento change:
<!DOCTYPE html> <html> <head> <title>Problema</title> <script> window.addEventListener('load',inicializarEventos,false); function inicializarEventos() { var ob=document.getElementById('nombre'); ob.addEventListener('change',modificarControl,false); ob=document.getElementById('apellido'); ob.addEventListener('change',modificarControl,false); ob=document.getElementById('hijos'); ob.addEventListener('change',modificarControl,false); } function modificarControl(e) { var ob; ob=e.target; alert('Se modificó el control:'+ob.getAttribute('id')); } </script> </head> <body> <form action="#"> Nombre:<input type="text" id="nombre" name="nombre"><br> Apellido:<input type="text" id="apellido" name="apellido"><br> Cantidad de hijos: <select id="hijos"> <option value="0">0</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> </select> <br> <input type="submit" value="confirmar"> </form> </body> </html>
El código javascript es:
window.addEventListener('load',inicializarEventos,false); function inicializarEventos() { var ob=document.getElementById('nombre'); ob.addEventListener('change',modificarControl,false); ob=document.getElementById('apellido'); ob.addEventListener('change',modificarControl,false); ob=document.getElementById('hijos'); ob.addEventListener('change',modificarControl,false); } function modificarControl(e) { var ob; ob=e.target; alert('Se modificó el control:'+ob.getAttribute('id')); }
Podemos decir que enlazamos los tres controles con la misma función "modificarControl", en esta obtenemos la referencia del objeto que emitió el evento:
var ob; ob=e.target;
Y luego mediante el método getAttribute obtenemos el valor del id:
alert('Se modificó el control:'+ob.getAttribute('id'));