Cita:  
					Iniciado por JUMASOL  
  Esto me funciona en todo menos en IE8:
  
Código:
 if (document.addEventListener) {                
document.querySelector('#elinput').addEventListener('change', function() {elonchage(this)}, false);
} else if (document.attachEvent) {     
document.querySelector('#elinput').attachEvent('change', function() {elonchage(this)}, false);        
}
     El método 
.attachEvent() no requiere de un tercer argumento para determinar si se saltará o no la fase de captura; además, el nombre del evento debe tener un "on" al inicio:   
Código Javascript
:
Ver original- document.querySelector('#elinput').attachEvent("onchange", elonchage); 
Por cierto, en el caso de usar solo el método 
.addEventListener(), estableciendo el nombre de la función como segundo argumento (
listener o 
callback), no es necesario pasarle el 
this como argumento ya que, el elemento en el cual se registró el evento (
document.querySelector('#elinput')), puede ser accedido a través de dicha palabra reservada en el contexto de la función:   
Código Javascript
:
Ver original- document.querySelector('#elinput').addEventListener("change", elonchage, false); 
-   
- function elonchage(){ 
-     console.log(this); //document.querySelector('#elinput') 
- } 
Por cierto, se recomienda usar solo el método 
.addEventListener() ya que es más completo, en cuanto a las características que posee, sobre los métodos antecesores; además de contar con soporte por parte de la mayoría de navegadores modernos. Para evitar problemas de incompatibilidad con navegadores antiguos, puedes implementar 
este polyfill.  
