$("#multiselect").hide();
$("#multiselect_container").append('<img id="loader" src="/loader.gif" />');
在IE中,由于某种原因,$("#list").click()
块内的2个以上函数被跳过,而不是FF,Chrome
$("#list").click(function()
{
var selection = $(this).val();
$("#multiselect").hide();
$("#multiselect_container").append('<img id="loader" src="/loader.gif" />');
$.ajax(
{
url: 'include/ajax.php?id='+selection,
async: false,
dataType: 'json',
success: function (json)
{
$("#loader").remove();
$("#multiselect").show();
//parse json
}
});//json
});
发生了什么:
有一个按钮#list
和一个容器#multiselect_container
,其中包含#multiselect
,它是容器大小的选择框。
单击#list
时,隐藏选择框,并显示其下方的容器,并带有加载栏。
当ajax调用完成后,移除加载栏并再次显示选择框。
在Firefox中,这非常好用。在IE中它没有。
我尝试过的事情:
$('#list').ajaxComplete(function() {});
将php文件暂停3秒钟。除了延迟之外,结果相同。
缓存不是问题,正在进行ajax调用
答案 0 :(得分:1)
您应该将async: false
更改为async: true
。对于async: false
,在ajax调用完成之后,显示器的正常行为才会更新。所以这种改变可能足以解决它。否则请继续阅读...
我之前遇到过与IE类似的问题,它只是不想更新显示以在执行Ajax时显示“加载”类型的消息 - 即使Ajax是异步的。这并不是函数本身被跳过,只是在Ajax完成回调执行之后显示器才更新 - 并且由于完整的处理删除了“加载”消息,就好像它从来没有从用户的角度出现视图。与您的代码一样,我的项目在Firefox中运行良好。这是一段时间以前,但如果我没记错的话,我通过在Ajax调用上引入一个短暂的超时让它在IE中工作,如下所示:
$("#list").click(function()
{
var selection = $(this).val();
$("#multiselect").hide();
$("#multiselect_container").append('<img id="loader" src="/loader.gif" />');
setTimeout(function() {
$.ajax(
{
url: 'include/ajax.php?id='+selection,
async: true, // changed from false
dataType: 'json',
success: function (json)
{
$("#loader").remove();
$("#multiselect").show();
//parse json
}
});//json
}, 5);
});