2012-03-20 64 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