0

我找不到问题。也许你可以帮助我:

load_images: function(config, container, page) {

   console.log(page) // Every time page = 4 Why?
   var paging = new Element('div','class':'pg'}).inject(container,'after'),     
       css_class = '';

   if (data.pages>1) {
     for (var i=1; i<=data.pages; i++) {                        
        css_class   = (i == page) ? 'current' : '';

        new Element('a', {'class':css_class,'href':'javascript:void(0);','html': i,
           events: { 
               click: function(e){
                  load_images(config, container, parseInt(i));
              }
           }
        }).inject(paging);
     }
   }
}

The code above generate HTML:

<div class="pg">
   <a class="current" href="javascript:void(0);">1</a>
   <a class="" href="javascript:void(0);">2</a>
   <a class="" href="javascript:void(0);">3</a>
</div>

当我单击页面链接时,我的页面变量为 4(请参阅 console.log())。为什么?谢谢。

4

1 回答 1

2

这是Javascript Closure的经典案例

问题是在您的情况下,单击事件会在循环中创建关闭并关闭 i var,因此最终它等于 i 的最后一个值:您可以做些什么来解决它在“for”循环中是这样的:

for (var i=1; i<=data.pages; i++) {                        
        css_class   = (i == page) ? 'current' : '';

        (function(i){
          new Element('a', {'class':css_class,'href':'javascript:void(0);','html': i,
            events: { 
               click: function(e){
                  load_images(config, container, parseInt(i));
              }
           }
         }).inject(paging);
       })(i);
     }

这样,您就可以复制 i 并将其发送到匿名函数,并且它始终“保留”其值。

要完全理解它 - 阅读我发送的链接 - 这个主题在 javascript 中有点复杂

于 2013-04-12T13:16:26.930 回答