2016-05-11 15 views
1

Ich versuche, ein onchange-Ereignis an ein Kontrollkästchen von js angehängt.Closure aktiviert beim Laden, nicht Kontrollkästchen ändern

Ich habe endlich die Schließung in einer for-Schleife arbeiten, aber jetzt aktiviert es auf Last statt auf Änderung.

Warum ist das?

https://jsfiddle.net/dkrh587h/2/

chkbox.addEventListener("change", (function(newVarA, newVarB, newVarC, newVarD) { 
    searchMap(newVarA, newVarB, newVarC, newVarD); 
    }(gblStatus, "Status", statuser, chkbox.checked)), false); 

Antwort

2

Dies liegt daran, dass Sie die Funktion aufgerufen wird mit der zusätzlichen Klammern zu addEventListener als zweites Argument übergeben wird.

Dies wird manchmal als eine self-executing Funktion:

function() { 
    // will get invoked immediately 
}(); 

Variablen wie statuser werden wegen der Schließung in Ihrer Callback verfügbar sein (vorausgesetzt, sie innerhalb eines funktionsGültigkeitsBereich deklariert werden, dass Ihr geschrieben Code „umschließt“).

sollte ein Muster wie das funktioniert:

var statuser = 'my user'; // will be available in your callback 
chkbox.addEventListener("change", function() { 
    searchMap(gblStatus, "Status", statuser, chkbox.checked); 
}, false); 
+0

Das ist mein erstes Problem war. Wann immer ich das versuchte, bekam ich nur das letzte Element in der for-Schleife. – Emwat

+0

@Emwat Ich sehe. Das ist ein klassischer Fall von Verwirrung mit Schließungen. Ich würde stattdessen 'gblStatus.forEach' empfehlen, um dieses Problem zu vermeiden. Finden Sie diese Antwort für Informationen, warum dieses Problem auftritt: http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example –

Verwandte Themen