javascript – jQuery关闭,循环和事件

前端之家收集整理的这篇文章主要介绍了javascript – jQuery关闭,循环和事件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个类似于这里的问题: Event handlers inside a Javascript loop – need a closure?,但是我使用的是jQuery,并且给出的解决方案似乎在绑定而不是点击时触发事件.

这是我的代码

  1. for(var i in DisplayGlobals.Indicators)
  2. {
  3. var div = d.createElement("div");
  4. div.style.width = "100%";
  5. td.appendChild(div);
  6.  
  7. for(var j = 0;j<3;j++)
  8. {
  9. var test = j;
  10. if(DisplayGlobals.Indicators[i][j].length > 0)
  11. {
  12. var img = d.createElement("img");
  13. jQuery(img).attr({
  14. src : DisplayGlobals.Indicators[i][j],alt : i,className: "IndicatorImage"
  15. }).click(
  16. function(indGroup,indValue){
  17. jQuery(".IndicatorImage").removeClass("active");
  18. _this.Indicator.TrueImage = DisplayGlobals.Indicators[indGroup][indValue];
  19. _this.Indicator.FalseImage = DisplayGlobals.IndicatoRSSpecial["BlankSmall"];
  20. jQuery(this).addClass("active");
  21. }(i,j)
  22. );
  23. div.appendChild(img);
  24. }
  25. }
  26. }

我已经尝试了几种不同的方式没有成功…

原来的问题是_this.Indicator.TrueImage始终是最后一个值,因为我使用循环计数器而不是参数来选择正确的图像.

解决方法

你缺少一个功能.click函数需要一个函数作为参数,所以你需要这样做:
  1. .click(
  2. function(indGroup,indValue)
  3. {
  4. return function()
  5. {
  6. jQuery(".IndicatorImage").removeClass("active");
  7. _this.Indicator.TrueImage = DisplayGlobals.Indicators[indGroup][indValue];
  8. _this.Indicator.FalseImage = DisplayGlobals.IndicatoRSSpecial["BlankSmall"];
  9. jQuery(this).addClass("active");
  10. }
  11. }(i,j);
  12. );

猜你在找的jQuery相关文章