簡體   English   中英

jQuery函數在后台運行?

[英]jQuery functions run in background?

我有一個頁面,上面有很多元素(〜1,500個),並且執行時

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

頁面需要一兩秒鍾才能反映出更改。 為了使用戶不會認為頁面被卡住,我想使用以下命令彈出一則小消息:

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

但是msgDiv永遠不會顯示。 如果我刪除$("#msgDiv").hide(); msgDiv與添加的類的應用程序同時出現(添加類花費了1或2秒鍾之后)。

似乎jQuery函數已合並並一起運行,而沒有任何屏幕更新,直到它們全部完成為止。

如何在$(".pickrow").addClass("vis");出現時顯示$(".pickrow").addClass("vis"); 正在處理嗎?

這是一個演示

您可能希望將皮革延遲幾秒鍾。

$("#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

您也可以使用這種方法

工作演示

$(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);
});

});

我認為,如果您簡化代碼,則會發現它的響應速度更快,並且可能不需要加載消息。 在代碼中,檢查if語句中的每個元素。 您可以檢查一個值,然后相應地更新所有值,而不是這樣做。

這是一個演示: http : //jsfiddle.net/jme11/3A4qU/

我對您的HTML進行了一次更改,將輸入按鈕的初始值設置為“顯示詳細信息”。 然后,在下面的代碼中,您可以僅檢查該值是否為Show Details,並刪除隱藏.pickrow的類並將按鈕的值更新為“ Hide Details”(無論如何,這對於用戶來說是更好的反饋)。 同樣,如果按鈕值不是“顯示詳細信息”,則可以將.hid類添加到拾取行。 不管是否單獨隱藏或顯示了某些類,這還將標准化所有類。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM