我有一个类似于这里的问题:
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);
- );