la méthode addEventListener tir plusieurs fois pour la même poignée lors du passage dans des disputes avec fonction anonyme

Pour une raison quelconque, l'écouteur d'événement est déclenché deux fois pour chaque élément lors du passage d'arguments dans une fonction anonyme. I. e., l'événement click sur l'élément el va enregistrer une fois et, par conséquent, le feu une fois.

el.addEventListener("click", handle, false);
el.addEventListener("click", handle, false);

Mais si je veux passer mes propres arguments, il va s'inscrire et le feu deux fois.

el.addEventListener("click", function() { handle(event, myArgument); }, false);
el.addEventListener("click", function() { handle(event, myArgument); }, false);

La question est de savoir pourquoi et quelle est la solution?

J'ai regardé ailleurs et n'arrive pas à trouver une solution ou à comprendre pourquoi ce problème est survenu. J'ai essayé de mettre en œuvre les solutions dans Comment passer d'un argument à la fonction écouteur passé à la méthode addEventListener? mais ils n'ont pas d'aide --

J'ai fait la base anonyme de la fonction ou de la fermeture puis la version la plus avancée, qui est illustré ci-dessous, mais il a fait un travail.

Je ne comprends pas pourquoi en passant pas les arguments des causes de l'élément de l'événement à enregistrer une fois et de passer des arguments à l'provoquant l'élément de l'événement à inscrire deux fois.

Voici le code:

<html>
<head>
<script type="text/javascript">
var handle_2 = function(evt, type) {
var test;
switch (type) {
case "focus": 
console.log(evt.target.value);
break;
case "click":
console.log(evt.target.id + " was clicked");
break;
default: console.log("no type found");
}
};
window.onload = function() {
var textbox = document.getElementById("t1");
var button = document.getElementById("btn");
textbox.value = "456";
button.value = "Press";
var typeFocus = "focus", typeClick = "click";
textbox.addEventListener("focus", (function(typeFocus) { return function(evt) { handle_2(evt, typeFocus); }})(typeFocus), false);
button.addEventListener("click", (function(typeClick) { return function(evt) { handle_2(evt, typeClick); }})(typeClick), false);
//Registers again for each element. Why?
textbox.addEventListener("focus", (function(typeFocus) { return function(evt) { handle_2(evt, typeFocus); }})(typeFocus), false);
button.addEventListener("click", (function(typeClick) { return function(evt) { handle_2(evt, typeClick); }})(typeClick), false);
};
</script>
</head>
<body>
<div id="wrapper">
<input id="t1" type="text" />
<input id="btn" type="button" />
</div>
</body>
</html>

Toute aide serait appréciée. Merci.

  • Pourquoi êtes-vous encore en appelant el.addEventListener deux fois?
  • C'est à l'extérieur de la portée de la discussion. Il a à faire avec certains vendeur code, je travaille sur.
InformationsquelleAutor user717236 | 2014-10-01