Sto lavorando su una pagina web che utilizza dojo e ha un numero (6 nel mio caso di test, ma variabile in generale) di widget di progetto su di esso. Sto invocando dojo.addOnLoad (init), e nella mia funzione init() Ho queste righe:Perché non riesco a far circolare un loop in Javascript?
dojo.connect(dijit.byId("project" + 0).InputNode, "onChange", function() {makeMatch(0);});
dojo.connect(dijit.byId("project" + 1).InputNode, "onChange", function() {makeMatch(1);});
dojo.connect(dijit.byId("project" + 2).InputNode, "onChange", function() {makeMatch(2);});
dojo.connect(dijit.byId("project" + 3).InputNode, "onChange", function() {makeMatch(3);});
dojo.connect(dijit.byId("project" + 4).InputNode, "onChange", function() {makeMatch(4);});
dojo.connect(dijit.byId("project" + 5).InputNode, "onChange", function() {makeMatch(5);});
e cambiare gli eventi per il mio progetto un widget per richiamare correttamente la funzione makeMatch. Ma se li sostituisco con un ciclo:
for (var i = 0; i < 6; i++)
dojo.connect(dijit.byId("project" + i).InputNode, "onChange", function() {makeMatch(i);});
funzione
stesso makeMatch(), lo stesso init) invocazione, (lo stesso tutto il resto - solo a rotazione le mie chiamate su in un ciclo - la funzione makeMatch non viene mai chiamato; gli oggetti non sono cablati.
Cosa sta succedendo e come lo risolvo? Ho provato a usare dojo.query, ma il suo comportamento è lo stesso del caso ciclo for.
Eccellente; grazie; questo funziona perfettamente. Penso che ci vorrà molto tempo per capire chiusure. –
prendi un libro chiamato "javascript the good parts" e capirai chiusure, tra le altre cose. – mkoryak
Grazie; Lo cercherò. –