2012-03-20 95 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 2012-03-20 10:21:05

+0

它不是關於680按鈕。我試圖將按鈕限制爲只有30,並且我得到相同的結果! – Tarek 2012-03-20 10:51:46

+0

點擊功能發生了什麼?如果將按鈕數減少到30(1/20),仍然需要35秒? – Dutchie432 2012-03-20 10:59:14

回答

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 2012-03-20 10:46:49

+1

不,使用1000個按鈕時需要200ms的更改。 – 2012-03-20 10:48:12