0

私は JavaScript が初めてで、サイトを維持する必要があります。実際の機能は、タブごとに 1 枚のカードをファイルにダウンロードすることです。ユーザーはたくさんのカードを持つことができるので、治療は常に成功するとは限りません (タブが多すぎる)。たとえば、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 以下の場合はうまく機能しますが、いくつかのファイルが必要な場合はそうではなく、ループの最後の部分だけがファイルを作成しています。firebug で何が起こるかを確認しようとすると、一連の処理が表示されますが、最後の処理だけが終了しています。私を助けてくれてありがとう。

4

1 に答える 1

0

あなたのコードを正しく読めば、あなたはブラウザに大量のファイルを個別のタブにダウンロードさせようとしています。ほとんどのブラウザーは、そのようにダウンロードのループを起動しようとしてもあまり評価しません。また、ユーザーは、ダイアログが表示される可能性があるため、それほど多くの保存を望んでいません。

それらをzipファイルサーバー側にパッケージ化し、1つのファイルを送信する方がはるかに優れています. それはより効率的で、よりユーザーフレンドリーになります。

于 2013-06-24T12:57:53.287 に答える