0

我是 javascript 新手,我需要维护一个网站。实际功能是将多张卡片下载到一个文件中,每个选项卡一张卡片。由于用户可以拥有大量卡片,因此治疗并不总是成功(选项卡太多),例如,我想创建一个包含 20 个选项卡的文件。

 var printTerm = function(grid){
     var rows   = grid.selected;
     if(rows==null) return;
     var ids = rows.map(function(val){return grid.getDataByRow(val).num_terme;});
     var nbMax = 20; 
     var nbFic;
     var idsPartiel;    
     var posDebut;
     var posFin;
     var a;    
     if(ids.length > nbMax)
     {    
         idsPartiel = ids; 
         if(ids.length % nbMax == 0)     nbFic = ids.length / nbMax;
         else                            nbFic = ((ids.length - (ids.length % nbMax)) / nbMax) + 1; 
         for (i=0 ; i< nbFic ; i++) 
         {     
                 posDebut = (nbMax * i);
                 if(i == nbFic - 1)      posFin = idsPartiel.length + 1;   
                 else                    posFin = posDebut + nbMax;
                 ids = idsPartiel.slice(posDebut,posFin);
                 a   = new Element('a', 'id':'download','href':'php/utils/export2pdf.php?ids='+ids.join(',')})
                         .addEvent('click',function(){location.href=this.href;}).inject(document.body);
                 a.fireEvent('click');             
                 a.dispose();
         }    
     }    
     else 
     {   
         a   = new Element('a',{'id':'download','href':'php/utils/export2pdf.php?ids='+ids.join(',')})
                 .addEvent('click',function(){location.href=this.href;}).inject(document.body);
         a.fireEvent('click');
         a.dispose();
     }    
 };   

当卡片数量小于或等于 nbMax 时,它工作得很好,但是当必须有多个文件时,不是:只有循环的最后一段正在创建文件。当我试图看看萤火虫会发生什么时,我看到了我的治疗方法,但只有最后一个结束了。谢谢你帮助我。

4

1 回答 1

0

如果我正确阅读了您的代码,您正试图让浏览器将大量文件下载到单独的选项卡中。大多数浏览器不会真正欣赏您尝试以这种方式启动下载循环,用户也不会真正希望保存那么多,因为对话框可能会弹出。

您最好将它们打包到一个 zip 文件服务器端并发送一个文件。它会更高效,对用户更友好。

于 2013-06-24T12:57:53.287 回答