Javascript jQuery show()方法不适用于Chrome和IE浏览器
当后台任务正在进行某些处理时,我会在网页上显示一个进度加载器。我面临的问题是,包含进度加载器的div在Chrome和IE浏览器上始终保持“display:none”。不过,它在FF和Safari上运行良好 这是HTMLJavascript jQuery show()方法不适用于Chrome和IE浏览器,javascript,jquery,html,css,Javascript,Jquery,Html,Css,当后台任务正在进行某些处理时,我会在网页上显示一个进度加载器。我面临的问题是,包含进度加载器的div在Chrome和IE浏览器上始终保持“display:none”。不过,它在FF和Safari上运行良好 这是HTML <div id="progressIndicatorBackground"> <div id="progressIndicator"> <img src="/cms/images/icons/progressIndicator.gif"
<div id="progressIndicatorBackground">
<div id="progressIndicator">
<img src="/cms/images/icons/progressIndicator.gif" alt="Loading...">
</div>
</div>
用于显示和隐藏进度加载器的JS函数
function progressIndicator(value) {
if(value) {
$("#progressIndicatorBackground").show();
}
else {
$("#progressIndicatorBackground").hide();
}
}
有几次我调用progressIndicator函数。例如,在其中一个页面中,我正在调用该函数(这只是我在web应用程序中使用的一个示例函数。还有其他函数,我也以同样的方式调用progressIndicator函数)
当后台任务正在进行且我正在获取JSON数据时,在调用progressIndicator(true)后,进度指示器应该是可见的,并且一旦处理完成,显示属性应该设置为none,因为我在完成所有操作后调用progressIndicator(false)。但progressIndicatorBackground的状态从未设置为显示:Chrome和IE上的块
function progressIndicator(value) {
if(value) {
$("#progressIndicatorBackground").css("display", "block");
}
else {
$("#progressIndicatorBackground").css("display", "none");
}
}
我正在使用最新版本或Chrome和IE
function progressIndicator(value) {
if(value) {
$("#progressIndicatorBackground").css("display", "block");
}
else {
$("#progressIndicatorBackground").css("display", "none");
}
}
p.S.S->我尝试将我的函数修改为,但没有成功。问题仍然存在于Chrome和IE上
function progressIndicator(value) {
if(value) {
$("#progressIndicatorBackground").css("display", "block");
}
else {
$("#progressIndicatorBackground").css("display", "none");
}
}
根据我的经验,display:none会让事情变得麻烦,只能作为最后的手段。看看这里的替代方案。我还发现有时添加
:hidden
有助于jquery显示隐藏或显示:none
元素。例如,$(“#progressIndicatorBackground:hidden”).show()代码>可能会让它工作。主要问题是因为使用了同步AJAX调用。它确实会冻结Chrome和IE,并阻止任何其他事件的发生
进度加载程序无法工作,因为它正在等待同步ajax调用完成事件加载
原始AJAX调用
fetchEventsForCategory: function (categoryId, parentId, day) {
var to = (date.getTo(day) == null) ? '' : '&to=' + date.getTo(day);
return $.ajax({
url: "/billfold-api/betting/events",
type: "POST",
data: 'scid=' + categoryId + '&pcid=' + parentId + '&from=' + date.getFrom(day) + to,
dataType: "json",
async: false,
});
},
修改了AJAX调用并成功回调
fetchEventsForCategory: function (categoryId, parentId, day) {
var to = (date.getTo(day) == null) ? '' : '&to=' + date.getTo(day);
return $.ajax({
url: "/billfold-api/betting/events",
type: "POST",
data: 'scid=' + categoryId + '&pcid=' + parentId + '&from=' + date.getFrom(day) + to,
dataType: "json",
async: true,
success: function(data) {
progressIndicator(false);
}
});
},
在我的JS函数中,我调用了进程加载器。我删除了progressIndicator(false)代码>并将其置于我的ajax调用本身的success函数下。检查可见性
样式alsovalue返回字符串或布尔值请检查请创建一个JSFIDLE,从外观上看,您拥有相关代码,创建一个FIDLE将加快速度..show()适用于所有浏览器,但是,如果您正在显示的内容也是隐藏的,那么它将不会显示任何内容。我认为您的代码总是返回false,因此它是隐藏的,只是在添加$(“#progressIndicatorBackground:hidden”)。show();对我来说不起作用。我在代码中做了一些更改,并发布了另一个问题。这里是链接