addEventListener feuern mehrere Male für den gleichen Griff, wenn man Argumente mit anonymen Funktion

Aus irgendeinem Grund, wird der Ereignis-listener feuern zweimal für jedes element, wenn die übergabe von Argumenten in eine anonyme Funktion. I. e., das click-Ereignis an element el wird einmal registrieren und damit Feuer sobald.

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

Aber wenn ich will, um an meinem eigenen Argumente zu, wird es registrieren und Feuer zweimal.

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

Ist die Frage, warum und was ist die Lösung?

Sah ich woanders und kann nicht scheinen, um eine Lösung zu finden oder zu verstehen, warum dieses problem Auftritt. Ich habe versucht, die Implementierung der Lösungen in Wie übergibt ein argument an die listener-Funktion übergeben addEventListener? aber Sie hat nicht geholfen --

Ich habe die basic anonyme Funktion oder die Schließung und dann die erweiterte version, die ist unten gezeigt, aber es hat funktioniert.

Verstehe ich nicht, warum, ohne dass Argumente übergeben bewirkt, dass das element Ereignis-einmal registrieren und Argumente übergeben wodurch das element Ereignis sich zweimal zu registrieren.

Hier ist der 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>

Jede Hilfe würde geschätzt werden. Danke.

Warum sind Sie selbst nannte el.addEventListener zweimal?
Es ist außerhalb des Anwendungsbereichs der Diskussion. Es hat zu tun mit einigen Hersteller code an dem ich arbeite.

InformationsquelleAutor user717236 | 2014-10-01

Schreibe einen Kommentar