我有一个类似于这里的问题:
Event handlers inside a Javascript loop – need a closure?,但是我使用的是jQuery,并且给出的解决方案似乎在绑定而不是点击时触发事件.
这是我的代码:
for(var i in DisplayGlobals.Indicators) { var div = d.createElement("div"); div.style.width = "100%"; td.appendChild(div); for(var j = 0;j<3;j++) { var test = j; if(DisplayGlobals.Indicators[i][j].length > 0) { var img = d.createElement("img"); jQuery(img).attr({ src : DisplayGlobals.Indicators[i][j],alt : i,className: "IndicatorImage" }).click( function(indGroup,indValue){ jQuery(".IndicatorImage").removeClass("active"); _this.Indicator.TrueImage = DisplayGlobals.Indicators[indGroup][indValue]; _this.Indicator.FalseImage = DisplayGlobals.IndicatoRSSpecial["BlankSmall"]; jQuery(this).addClass("active"); }(i,j) ); div.appendChild(img); } } }
我已经尝试了几种不同的方式没有成功…
原来的问题是_this.Indicator.TrueImage始终是最后一个值,因为我使用循环计数器而不是参数来选择正确的图像.
解决方法
你缺少一个功能.click函数需要一个函数作为参数,所以你需要这样做:
.click( function(indGroup,indValue) { return function() { jQuery(".IndicatorImage").removeClass("active"); _this.Indicator.TrueImage = DisplayGlobals.Indicators[indGroup][indValue]; _this.Indicator.FalseImage = DisplayGlobals.IndicatoRSSpecial["BlankSmall"]; jQuery(this).addClass("active"); } }(i,j); );