我正在开发一个使用 dojo 的网页,并且上面有许多(在我的测试用例中为 6,但通常是可变的)项目小部件。我正在调用 dojo.addOnLoad(init),并且在 init() 函数中我有以下几行:
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);});
我的项目小部件的更改事件正确调用 makeMatch 函数。但如果我用循环替换它们:
for (var i = 0; i < 6; i++)
dojo.connect(dijit.byId("project" + i).InputNode, "onChange", function() {makeMatch(i);});
相同的 makeMatch() 函数,相同的 init() 调用,相同的其他一切 - 只是将我的调用滚动到一个循环中 - makeMatch 函数永远不会被调用;对象没有接线。
这是怎么回事?我该如何解决?我尝试过使用 dojo.query,但其行为与 for 循环情况相同。