jQuery函数在后台运行?

时间:2014-06-05 14:59:22

标签: javascript jquery

我有一个页面,上面有很多相同类的元素(~1,500),当我执行时

$(".pickrow").addClass("vis");

页面需要一两秒才能反映更改。因此,用户不会认为页面被卡住了,我想使用以下命令弹出一条小信息:

$("#msgDiv").show();
$(".pickrow").addClass("vis");
$("#msgDiv").hide();

但msgDiv从未表现出来。如果我删除了$("#msgDiv").hide(); msgDiv与添加的类的应用程序同时出现(在添加该类所花费的1或2秒之后)。

似乎jQuery函数汇总并在没有任何屏幕更新的情况下一起运行,直到它们全部完成。

如何在$(".pickrow").addClass("vis");正在处理时显示msgDiv?

这是 Demo

3 个答案:

答案 0 :(得分:2)

您可能希望将隐藏延迟几秒钟。

$("#msgDiv").show();
$(".pickrow").addClass("vis");
setTimeout(function(){ $("#msgDiv").hide(); },2000);

或者使用jQuery的动画队列进行计时:

$("#msgDiv").show();
$(".pickrow").addClass("vis");
$("#msgDiv").delay(2000).hide(1); //must make it at least 1 ms to go into the queue

答案 1 :(得分:2)

你也可以采用这种方法

正在使用 DEMO

$(document).on("click",".btn",function(){
    $(".msg").show("fast",function(){
        $(".pickrow").addClass("vis");
   var interval = setInterval(function(){

        var picLength = $(".pickrow").length;
        var visLength = $(".vis").length;

        if(picLength == visLength){
            clearInterval(interval);
            $(".msg").hide();
        }

    },500);
});

});

答案 2 :(得分:0)

我认为如果您简化代码,您会发现它的响应速度更快,可能不需要加载消息。在代码中,检查if语句中的每个元素。您可以检查一个值,然后相应地更新所有值,而不是这样做。

这是一个演示:http://jsfiddle.net/jme11/3A4qU/

我对您的HTML进行了一次更改,将输入按钮的初始值设置为"显示详细信息"。然后在下面的代码中,您可以检查该值是否为Show Details并删除隐藏.pickrow的类,并将该按钮的值更新为" Hide Details" (无论如何,这对用户来说是更好的反馈)。同样,如果按钮值不是"显示详细信息",则可以将.hid类添加到pickrow中。这也将标准化所有类,无论是否单独隐藏或显示它们。

$('#showhide').on('click', function(){
    if ($(this).val() === 'Show Details') {
        $('.pickrow').removeClass('hid');
        $(this).val('Hide Details');
    } else {
        $('.pickrow').addClass('hid');
        $(this).val('Show Details');
    }    
});