Tenga una mirada en el método handleEvent
https://developer.mozilla.org/en-US/docs/Web/API/EventListener
"crudo" javascript:
function MyObj() {
this.abc = "ABC";
}
MyObj.prototype.handleEvent = function(e) {
console.log("caught event: "+e.type);
console.log(this.abc);
}
var myObj = new MyObj();
document.querySelector("#myElement").addEventListener('click', myObj);
Ahora haga clic en el elemento (con id "myElement") y debe imprimir el siguiendo en la consola:
evento capturado: haga clic en
ABC
Esto le permite tener un método de objeto como controlador de eventos, y tener acceso a todas las propiedades del objeto en ese método.
Usted no puede simplemente pasar un método de un objeto a addEventListener directamente (como esa: element.addEventListener('click',myObj.myMethod);
) y esperar que myMethod
a actuar como si estuviera normalmente llamado en el objeto. Supongo que cualquier función que se pase a addEventListener se copia de alguna manera en lugar de hacer referencia a ella. Por ejemplo, si pasa una referencia de función de escucha de evento a addEventListener (en forma de una variable) y luego desarma esta referencia, el detector de eventos se sigue ejecutando cuando se capturan eventos.
Otro (menos elegante) solución alternativa para pasar un método como el detector de eventos y stil this
y aún así tener acceso a las propiedades de objetos dentro del detector de eventos sería algo así:
// see above for definition of MyObj
var myObj = new MyObj();
document.querySelector("#myElement").addEventListener('click', myObj.handleEvent.bind(myObj));
Creo que eres el único que no me ve como un tonto (por no mencionar la notación de corchetes/la incompatibilidad del navegador onclick | click). Spot on! – Ropstah
considere esto: http://www.howtocreate.co.uk/tutorials/javascript/domevents - ¿invocará a la función onclick invoke * todos los controladores de eventos registrados? Además, invocar falsamente un evento no producirá la acción predeterminada asociada con ese evento (por ejemplo, un envío de formulario). – jrharshath
Gumbo, ya que este código produce -diferentes- resultados, todavía no funciona con las bibliotecas Microsoft.Ajax y Microsoft.AjaxMvc .... – Ropstah