Wie übergebe ich Parameter an den Event-Handler? Als ich zum ersten Mal mit Javascript in Kontakt kam, hatte ich oft mit diesem Problem zu kämpfen, da ich kein tiefes Verständnis für Schließungen hatte.
In Diskussionsgruppen stoße ich häufig auf dieses Problem:
Kopieren Sie den Codecode wie folgt:
<!DOCTYPE HTML>
<html>
<Kopf>
<meta charset="utf-8">
<title>Wie übergebe ich Parameter an den Event-Handler? </title>
</head>
<Körper>
<a href="#" id="aa">Klicken Sie auf mich</a>
<script type="text/javascript">
var E = {
on: function(el, type, fn){
el.addEventListener?
el.addEventListener(type, fn, false):
el.attachEvent("on" + type, fn);
},
un: function(el,type,fn){
el.removeEventListener?
el.removeEventListener(type, fn, false):
el.detachEvent("on" + type, fn);
}
};
var v1 = 'Buchse', v2 = 'Lilie';
Funktionshandler(arg1,arg2){
alarm(arg1);
alarm(arg2);
}
// Wie übergebe ich die Parameter v1 und v2 an den Handler?
//Das Standardereignisobjekt wird als erster Parameter des Handlers übergeben.
// Zu diesem Zeitpunkt ist das erste, was beim Klicken auf den Link angezeigt wird, das Ereignisobjekt, und das zweite ist undefiniert.
E.on(document.getElementById('aa'),'click',handler);
</script>
</body>
</html>
Wie übergebe ich die Parameter v1 und v2 an den Handler? Das Standardereignisobjekt wird als erster Parameter des Handlers übergeben. Wenn Sie auf den Link klicken, wird als erstes das Ereignisobjekt angezeigt, und das zweite ist undefiniert.
Option 1: Das Ereignisobjekt wird nicht beibehalten und als erster Parameter übergeben
Kopieren Sie den Codecode wie folgt:
Funktionshandler(arg1,arg2){
alarm(arg1);
alarm(arg2);
}
E.on(document.getElementById('aa'),'click',function(){
handler(arg1,arg2);
});
Option 2: Behalten Sie das Ereignisobjekt als ersten Parameter bei
Kopieren Sie den Codecode wie folgt:
Funktionshandler(e,arg1,arg2){
Warnung(e);
alarm(arg1);
alarm(arg2);
}
E.on(document.getElementById('aa'),'click',function(e){
handler(e,arg1,arg2);
});
Option 3: getCallback zu Function.prototype hinzufügen, ohne das Ereignisobjekt beizubehalten
Kopieren Sie den Codecode wie folgt:
Function.prototype.getCallback = function(){
var _this = this, args = arguments;
Rückgabefunktion(e) {
return _this.apply(this || window, args);
};
}
E.on(document.getElementById('aa'),'click',handler.getCallback(v1,v2));
Option 4: getCallback zu Function.prototype hinzufügen und das Ereignisobjekt als ersten Parameter beibehalten.
Kopieren Sie den Codecode wie folgt:
Function.prototype.getCallback = function(){
var _this = this, args = [];
for(var i=0,l=arguments.length;i<l;i++){
args[i+1] = Argumente[i];
}
Rückgabefunktion(e) {
args[0] = e;
return _this.apply(this || window, args);
};
}
E.on(document.getElementById('aa'),'click',handler.getCallback(v1,v2));