在筛选表之前显示/隐藏图像是't工作

Show/Hide image before filtering a table isn't working

本文关键字:工作 图像 隐藏 筛选 显示      更新时间:2023-09-26

我有一个网页,里面有一些非常大的表,我正在使用我编写的一些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();
}

非常感谢!

也许您没有给#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