2012-01-27 56 views
0

我有一些非常大的表格的网页,我使用我编写的一些jQuery例程进行过滤。无论如何,当这些表格变得非常大时,过滤功能可能需要一些时间才能完成。所以我想我会取消隐藏动画GIF,所以用户有一些反馈。除非我把警报语句在它的前面在过滤表格之前显示/隐藏图像不起作用

$('#loadingimg').show(); 

:但是,GIF从来没有出现,当我打电话。我为丑陋的代码道歉,我不是一个有经验的jquery/javascript程序员。

function filter() 
{ 
    var eles = ["mtmprogram","rate","stage"]; 
    var tag; 
    var classes=''; 

    $('#loadingimg').show(); 
//alert('hi'); 
    $('.report').hide(); 

    for (var i in eles) 
    { 
     tag = '#' + eles[i] + ' option:selected'; 
     if ($(tag).val()) 
     { 
      //$('.'+ $(tag).val()).show(); 
      classes = classes + '.' + $(tag).val(); 
     } 
    } 
    if (classes == '') 
     $('tr.report').show(); 
    else 
     $(classes).show(); 

    filterSubtables('Loan Number'); 
    $('#loadingimg').hide(); 

} 

非常感谢!

+0

你试过调试与控制台? – j08691 2012-01-27 18:19:16

回答

0

也许你没有给#loadingimg元素足够的时间来显示。你可以通过在超时运行你的代码的其余部分测试:

function filter() 
{ 
    var eles = ["mtmprogram","rate","stage"], 
     classes = ''; 

    $('#loadingimg').show(); 
//alert('hi'); 
    setTimeout(function() { 
     $('.report').hide(); 

     for (var i = 0, len = eles.length; i < len; i++) 
     { 
      var $tag = $('#' + eles[i] + ' option:selected'); 
      if ($tag.val()) 
      { 
       //$('.'+ $tag.val()).show(); 
       classes = classes + '.' + $tag.val(); 
      } 
     } 
     if (classes == '') 
      $('.report').show(); 
     else 
      $(classes).show(); 

     filterSubtables('Loan Number'); 
     $('#loadingimg').hide(); 
    }, 500); 

} 

请注意,我改怎么tag变量使用(这将创建较少的CPU开销,使更少的jQuery的选择,并为当地的一个变量来使用尽可能)。我也改变你的循环来执行惊人的速度比for (a in b)更好的格式:http://jsperf.com/jquery-each-vs-for-loops/2

+0

恩,呵呵!感谢编程技巧! – 2012-01-27 18:44:20

+0

好消息是,当我在那里有超时时,img就会显示出来......但是如果时间过长,超时会不会让代码无法完成? – 2012-01-27 18:56:02

+1

不,超时只是延迟代码的执行直到指定的毫秒数,在这种情况下是500(或半秒)。代码然后允许运行,只要需要。 ''setTimeout'的文档:https://developer.mozilla.org/en/DOM/window.setTimeout – Jasper 2012-01-27 19:18:52