2017-04-06 37 views
0

我已经实现了一个jQuery Bootgrid。我想管理显示和隐藏我已经实现的加载器。jQuery Bootgrid如何检查bootgrid是否仍在加载

分别显示和隐藏加载程序$("#ajaxLoader").show();和$(“#ajaxLoader”)。hide();`。

我有我的Bootgrid初始化实现如下:

var grid = $('#grid').on("load.rs.jquery.bootgrid", function() { 
    $("#ajaxLoader").show(); 
}).bootgrid({ 
    ajax: true, 
    ajaxSettings: { 
     method: "GET", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     cache: false 
    }, 
    searchSettings: { 
     delay: 500, 
    }, 
    url: myURL, 
    rowCount: [5, 10, 50, 75, 100, 200, -1] 
}).on("loaded.rs.jquery.bootgrid", function (e) { 
    $("#ajaxLoader").hide(); 
}); 

现在这工作正常,但我想优化它在两个方面:

  1. Bootgrid的搜索功能似乎有它自己的装载机,所以有没有办法为了不显示我的ajax加载程序,如果搜索发生?

  2. 我的装载器弹出并快速隐藏短的查询。有什么办法可以推迟发生?

解决选2可能会解决方案1在它自己的,但无论如何这里是我试过关于选项2

我试过setTimeout(function() { $("#ajaxLoader").show(); }, 1000);,但那么它永远不会被再次隐藏。我通过使用setTimeout(function() { $("#ajaxLoader").hide(); }, 1000)解决了这个问题,但它闪烁显示并不必要地隐藏。

所以理想情况下,我需要检查Bootgrid是否在我应用该函数之前仍在加载。

我该如何解决我的加载问题?

编辑:

我也试着设置loading变量,其中对我load方法我说:

loading = true; 
setTimeout(function() { if (loading) { $("#ajaxLoader").show(); }}, 1000); 

和我loaded事件如下:

setTimeout(function() { $("#ajaxLoader").hide(); }, loaderDelay); 

这仍然给我同样的闪烁错误。

回答

0

我解决它使用clearTimeout()功能是这样的:

var showLoader; 

var grid = $('#grid').on("load.rs.jquery.bootgrid", function() { 
    showLoader = setTimeout(function() { $("#ajaxLoader").show(); }, 1000); 
}).bootgrid({ 
    ajax: true, 
    ajaxSettings: { 
     method: "GET", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     cache: false 
    }, 
    searchSettings: { 
     clearTimeout(showLoader); 
     delay: 500, 
    }, 
    url: myURL, 
    rowCount: [5, 10, 50, 75, 100, 200, -1] 
}).on("loaded.rs.jquery.bootgrid", function (e) { 
    $("#ajaxLoader").hide(); 
});