¿Cómo pasar parámetros al controlador de eventos? Cuando entré en contacto por primera vez con Javascript, a menudo tuve problemas con este problema porque no tenía un conocimiento profundo de los cierres.
A menudo me encuentro con este tipo de problema en grupos de discusión, como sigue:
Copie el código de código de la siguiente manera:
<!TIPO DE DOCUMENTO HTML>
<html>
<cabeza>
<meta juego de caracteres="utf-8">
<title>¿Cómo pasar parámetros al controlador de eventos? </título>
</cabeza>
<cuerpo>
<a href="#" id="aa">Haz clic en mí</a>
<tipo de script="texto/javascript">
var E = {
encendido: función (el, tipo, fn) {
el.addEventListener?
el.addEventListener (tipo, fn, falso):
el.attachEvent("activado" + tipo, fn);
},
un: función(el,tipo,fn){
el.removeEventListener?
el.removeEventListener(tipo, fn, falso):
el.detachEvent("activado" + tipo, fn);
}
};
var v1 = 'jota', v2 = 'lirio';
controlador de función (arg1,arg2){
alerta(arg1);
alerta(arg2);
}
// ¿Cómo pasar los parámetros v1 y v2 al controlador?
//El objeto de evento predeterminado se pasará como primer parámetro del controlador.
// En este momento, lo primero que aparece al hacer clic en el enlace es el objeto del evento y el segundo no está definido.
E.on(document.getElementById('aa'),'clic',handler);
</script>
</cuerpo>
</html>
¿Cómo pasar los parámetros v1 y v2 al controlador? El objeto de evento predeterminado se pasará como primer parámetro del controlador. Al hacer clic en el enlace, lo primero que aparece es el objeto de evento y el segundo no está definido.
Opción 1, el objeto de evento no se retiene y se pasa como primer parámetro
Copie el código de código de la siguiente manera:
controlador de función (arg1,arg2){
alerta(arg1);
alerta(arg2);
}
E.on(document.getElementById('aa'),'hacer clic',función(){
controlador(arg1,arg2);
});
Opción 2, conservar el objeto de evento como primer parámetro
Copie el código de código de la siguiente manera:
controlador de función (e,arg1,arg2){
alerta(e);
alerta(arg1);
alerta(arg2);
}
E.on(document.getElementById('aa'),'hacer clic',función(e){
controlador(e,arg1,arg2);
});
Opción 3: agregar getCallback a Function.prototype sin conservar el objeto de evento
Copie el código de código de la siguiente manera:
Function.prototype.getCallback = función(){
var _this = esto, args = argumentos;
función de retorno (e) {
return _this.apply(esta || ventana, argumentos);
};
}
E.on(document.getElementById('aa'),'click',handler.getCallback(v1,v2));
Opción 4: agregue getCallback a Function.prototype y conserve el objeto de evento como primer parámetro.
Copie el código de código de la siguiente manera:
Function.prototype.getCallback = función(){
var _this = esto, args = [];
for(var i=0,l=argumentos.length;i<l;i++){
argumentos[i+1] = argumentos[i];
}
función de retorno (e) {
argumentos[0] = e;
return _this.apply(esta || ventana, argumentos);
};
}
E.on(document.getElementById('aa'),'click',handler.getCallback(v1,v2));