jQuery Ajax 微调器未在 IE7 中显示

Posted

技术标签:

【中文标题】jQuery Ajax 微调器未在 IE7 中显示【英文标题】:jQuery Ajax spinner not displaying in IE7 【发布时间】:2011-01-21 12:38:19 【问题描述】:

我试图在加载 AJAX 内容时显示一个 ajax 微调器。

以下代码在 Firefox 中似乎可以正常工作,但在 IE7 中却不行。正在调用显示和隐藏微调器的函数,但浏览器不显示它。

这里是 jQuery:

        $.ajax( 
            url: filterorSearch,
            data: filterParams: JSON.stringify(filters), requestTime: new Date().getTime(),
            beforeSend: function()
                showLoadingGraphic();
            ,
            complete: function()
                hideLoadingGraphic();
            ,
            success: function(data)
                $("#BreakingNews").html(data);
                GetRelatedarticles();                
            
        );

    function showLoadingGraphic() 
        alert("show");
        var showSpinner = $('#page-placeholder-wrapper #main-left').prepend('<div id="ajaxLoader"></div>');
        return showSpinner;
    

    function hideLoadingGraphic() 
        alert("hide");
        var hideSpinner = $('#ajaxLoader').remove();
        return hideSpinner;
    

以及与微调器相关的 CSS:

#page-placeholder-wrapper #main-left 

    position:relative;
    

#ajaxLoader 

    background:rgba(255,255,255,.7) url("../images/icon-ajax-loading.gif") no-repeat center center;
    height:100%;
    left:0;
    position:absolute;
    top:0;
    width:100%;
    z-index:9999;
    

【问题讨论】:

【参考方案1】:

为了让你工作,试试这个:

    background: url("../images/icon-ajax-loading.gif") no-repeat center center rgba(255,255,255,.7);

我不知道为什么 rgba 必须放在最后!

[编辑]

IE 不支持 rgba,因此从 background: 开始会出错,并且不会为 css 执行该行的其余部分

见:Browser Support for RGBa

【讨论】:

谢谢,我会在星期一试一试。【参考方案2】:

JQuery 在执行 ajax 时实际上会触发事件。

$(document).ajaxStart(function()
    $('#ajaxIndicator').show();
 ).ajaxStop(function()
    $('#ajaxIndicator').hide();
 );

与为每个单独的呼叫手动执行相比,这将为您节省大量时间。

您可以有一个相对于文档顶部的 DIV,您可以显示/隐藏它覆盖页面上的所有其他内容。 (我忘记了确切的 CSS 使它总是距离屏幕顶部 200 像素等) 更新:我认为它的位置:固定,虽然我不确定这在 IE 中的效果如何。

  <body>
    <div id="ajaxIndicator" style="position:fixed; top:200px; text-align:center">
        <img src="../indicator.gif" /> Loading ...
    </div>

    ...

【讨论】:

这也不起作用。我很欣赏您的意见,但我认为代码中的其他地方一定有问题。【参考方案3】:

可能是您的 DOM 元素的 Z 排序问题;

IE 以与其他浏览器不同的方式处理对象的 Z 排序。尝试在您的包装元素上设置 z-index ,它应该会有所帮助。一般来说,如果您想省去使用相对定位或绝对定位定位的元素的麻烦,总是为它们的父级提供正确的 z-index;

让实际的页面进行调试会更容易。

【讨论】:

恐怕不是这样。我正在本地为客户工作,因此发布页面不是一种选择。很好,感谢您的意见:) 当我在 show 函数中检查它的长度时,它看起来没有执行前置操作,它返回为 0。 hmm,胡乱猜测 - 尝试将 zoom:1 添加到包装元素以触发其上的 hasLayout - 可能是这样 - 或者在 DOM 树的更高位置缺少 hasLayout 您是否 100% 认为 beforeSend 在 ie 中被触发?它会触发警报吗?以为是渲染问题,但如果你说它根本没有添加元素,那一定是别的东西 只是为了确认 - 最新版本的 jQuery? IE7 中没有一个错误?【参考方案4】:

为了我的理智并在今天完成这项工作。

我已将“ajaxLoader”元素添加到标记中,最初使用 CSS 隐藏,然后在 AJAX 启动/停止时显示/隐藏。

这适用于所有浏览器。

感谢大家的意见。

【讨论】:

以上是关于jQuery Ajax 微调器未在 IE7 中显示的主要内容,如果未能解决你的问题,请参考以下文章

反应本机选择器未在android上显示

引导日期选择器未在 editorFor 中显示模型值

在 jQuery Mobile 中的 Ajax 调用中显示页面加载微调器

使用跟踪代码管理器未在 Analytics 中显示增强型电子商务数据

Xamarin 表单文件选择器未在 ios 上显示相机胶卷或图像库

项目资源管理器未在 Eclipse rcp 应用程序中显示项目