在过滤表之前显示/隐藏图像不起作用

时间:2012-01-27 18:07:56

标签: javascript jquery

我的网页上有一些非常大的表,我正在使用我编写的一些jquery例程进行过滤。无论如何,当这些表变得非常大并且过滤功能可能需要一些时间才能完成。所以我想我会取消隐藏GIF动画,以便用户得到一些反馈。但是,当我打电话时,gif永远不会出现:

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

除非我在其前面发出警告声明。我为丑陋的代码道歉,我不是一个经验丰富的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();

}

非常感谢!

1 个答案:

答案 0 :(得分: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