2012-03-20 6 views
0

hiiページ内に680個のボタンがあり、それぞれの機能を使ってすべての機能を実行したいと考えています。ここでのコードは次のとおりです。各機能

$("button#check_all").button().click(function(){ 
    btns=$(".viewport").find('.third_cat_chb');//here are all 680 btns 
    this_btn=$(this); 
    count=btns.size(); //680 
    cpt=0; 
    btns.each(function(){ 
     cpt += 100/count; 
     if($(this).is(".cat_chb_off")){ 
      $(this).trigger('click'); 
     } 
     $("#progressbar").progressbar({ value : cpt}); 
    }); 
    $("#progressbar").hide('slow'); 
}); 

問題は、私は私が間隔を設定するのではなく、一人で、オンラインの各ボタンを終了しないで、それらすべてを選択する]をクリックしたときにボタンが直ちに変更を見たいということです。 しかし実際には、サイトが35秒以上滞留していて、ボタンが突然変わったのがわかります。

+0

ボタン多数のクライアント側を停滞されるように聞こえます。また、各項目の 'click'機能で何が起こっているかによって異なります。スレッドのルック・アンド・フィールを得るためには、スレッドやその他の非同期技術(おそらくコールバック付き)を使用する必要があります。サンプルHTMLを少し投稿できますか? – Dutchie432

+0

680個のボタンではありません。ボタンを30個に制限しようとしましたが、同じ結果が得られました!! – Tarek

+0

クリック機能で何が起こっていますか?ボタンの数を30(1/20)に減らしても、それでも35秒かかりますか? – Dutchie432

答えて

0

が答えです:

//check buttons: 
$("button#check_all").button({ 
    icons: { 
     primary: "ui-icon-battery-3" 
    }, 
    text: false 
}).click(function(){ 
    btns=$(".viewport").find('.third_cat_chb'); 
    this_btn=$(this); 
    count=btns.size(); 
    move_over(0,1); 
}); 

function move_over(i, time){ 
    var btn = btns.eq(i); 
    cpt += 100/count; 
    if(btn.is(".cat_chb_off")){ 
     btn.trigger('click'); 
    } 
    $("#progressbar").progressbar({ value : cpt}); 

あなたが見ることができるように、私はすべてで、各使用しないでください! のsetTimeout(関数(){ move_over(++ I、時間); }、時間)

}
1

問題はプログレスバーです。それぞれのループ内で値を設定するだけでなく、ループごとに初期化しています。

$("#progressbar").progressbar("option", "value", cpt); 

しかし、それはあなたが(プログレスバーやボタンで)変更を見れば、それは本当にのブラウザに依存します:

は、各値のみを設定する内部で、各外にプログレスバーを初期化しますあなたがループ内にいるときには、提案された変更を使って素早く処理し、通常ブラウザは新しいものをレンダリングしませんでした。ここ

+0

それはprogessbarだけではない..それもボタンです。 – Tarek

+1

いいえ、変更は1000ミリ秒で200ミリ秒かかる –

関連する問題