2009-09-22 64 views
1

这是在杀我。在IE7和8中,使用jqModal,屏幕在模式内容加载之前闪烁黑色。我已经设置了一个测试应用来向你展示发生了什么。我已经从网站采取jqModal EXACTLY,没有任何变化,没有外部CSS可能会影响我的应用程序。它适用于所有其他浏览器(包括IE6)。jqmodal IE(7或8)在模态加载前闪烁黑色

http://jqmtest.heroku.com/

因此,前两个环节是AJAX调用,第二个是直线上升内嵌HTML。 (我原本以为这是影响它的阿贾克斯,但似乎并非如此,然后我认为它是缓慢加载阿贾克斯,因此对两个不同的阿贾克斯链接)

什么是疯狂的是,jqmodal网站本身在IE中完美工作,没有黑色闪烁,但我看不出我做错了什么。代码是直线前进

HTML:

<body> 
<div id="ajaxModal" class="jqmWindow"></div> 
<div id="inlineModal" class="jqmWindow"> 
    <div style="height:300px;position:relative;"> 
    <p>Here's some inline content</p> 
    <a href="#" onclick='$("#inlineModal").jqmHide();return false;' style="position:absolute;bottom:10px;right:10px">Close</a> 
    </div> 
</div> 
<div style="width:600px;height:400px;margin:auto;background:#eee;"> 
    <p><a href="/ajax/short" class="jqModal">Short loading modal</a></p> 
    <br /> 
    <p><a href="/ajax/long" class="jqModal">Longer loading modal</a></p> 
    <br /> 
    <p><a href="#" class="jqInline">inline modal</a></p> 
</div>  
</body> 

的Javascript:

<script type="text/javascript"> 
    $(function(){ 
    $("#ajaxModal").jqm({ajax:'@href', modal:true}); 
    $("#inlineModal").jqm({modal:true, trigger:'.jqInline'}); 
    }); 
</script> 

CSS是完全一样的一个从jqModal的网站下载的,所以我会忽略它,但你可以看到它在我的应用程序

有没有人遇到过这个?我不明白他的作品和我的作品没有。

+0

我已经经历过这种作为好(还没有找到解决方案)。当你有{modal:true}并且有一个不透明的覆盖层时,会发生黑色闪光。 jqModal网站上的例子都没有这两种情况。 – jimyi 2009-10-16 04:55:57

回答

0

在与源代码一起玩后,我发现了一种解决方法。从变更线41(jqModal R14):

if(c.modal) {if(!A[0])L('bind');A.push(s);} 

if(c.modal) {A.push(s);} 

我还主持了修复heredemo for IE7一起。我并不完全确定自从源代码被缩小后会发生什么变化(尽管我猜想它可能需要一次性显示多个模式),所以一定要充分测试它以确保它不会中断任何东西。

+0

真棒,我会测试这个时候,我有机会。 jqModal的来源如何令人讨厌!我不明白为什么有人会故意写这样的代码(它在技术上没有缩小,他只是这样写的)。 Thx我会回来我的调查结果 – brad 2009-10-19 14:57:58

0

我试过jimyi的解决方案,但它并没有解决我的问题。因此,这里就是我想出了:

在我的CSS我添加了一个新的规则

.jqmOverlay { display: none; } 

,当我突然出现的特定模式对话框我这样做:

$("#pleaseWait").jqmShow(); // show the modal dialog 
$(".jqmOverlay").fadeIn(10); // very quick fade-in 

淡入淡出工作覆盖CSS规则&黑色闪光被消除。

注意:我没有测试过它,但fadeIn操作可能会干扰显示覆盖层不完全透明的模式对话框。

1

我想我想出了一个修复这个晦涩难懂的问题。

变化

o=$('<div></div>').css({height:'100%',width:'100%',position:'fixed',left:0,top:0,'z-index':z-1,opacity:c.overlay/100}); 

o=$('<div></div>').css({height:'100%',width:'100%',position:'fixed',left:0,top:0,'z-index':z-1,opacity:c.overlay/100}).hide(); 

,改变

h.o=(o)?o.addClass(c.overlayClass).prependTo('body'):F; 

h.o=(o)?o.addClass(c.overlayClass).prependTo('body').show():F;