jQuery:使用slideUp()/ slideDown()时IE8边距崩溃

时间:2010-03-25 15:54:01

标签: jquery internet-explorer-8

我在这里上传了一个测试文件:

http://dl.dropbox.com/u/2201804/IE8test.html

如果单击“Click me”div,您将看到使用slideDown()显示“Feedback”div。单击另一个框中的“单击我”可以滑动当前显示的反馈并向下滑动相应的反馈。

在IE8中,完成slideUp()/ slideDown()操作后,框之间的边距会折叠。

这是jQuery动画的问题还是IE8中的显示错误?

4 个答案:

答案 0 :(得分:23)

  

溢出:隐藏;

应该做的工作:)

答案 1 :(得分:5)

我没有使用边距的解决方案,但如果用填充替换边距,IE8将会播放。在你的情况下,你需要一个额外的容器div,因为你已经在使用填充,并且你有一个背景颜色集。

所以你的解决方案看起来像这样:

<div class="assessment">
  <div class="inner">
    <div class="question">
...

.assessment { 
  padding-top: 20px; 
  background: transparent; 
}

.assessment .inner {
  background-color:#DDDDDD;
  border:1px solid #CCCCCC;
  color:#555555;
  display:block;
  padding:10px 0;
  text-align:left;
  width:100%;
}

干杯 TJ

答案 2 :(得分:2)

只是用我的解决方案更新这个旧线程,因为我无法使用CSS解决问题。我使用slideToggle的回调函数来关注文档正文,因为我注意到点击页面上的任何其他位置似乎会导致DOM的重排并且边距回来了。

.slideToggle(
    500,
    function() {
        document.body.focus();
    }
);

答案 3 :(得分:-1)

我仍然遇到使用此“溢出:隐藏”建议的边距消失的问题,并决定通过使用仍会显示的自定义函数覆盖“默认”jQuery功能,完全在IE8中禁用slideUp / slideDown功能隐藏元素,但在使用IE8时

为实现这一目标,我使用IE conditional comment将一个类附加到html元素,如下所示:

<!--[if IE 8]><html class="ie8"><![endif]-->

然后,我在我的javascript中定义了以下函数来覆盖slideUp / slideDown函数,如下所示:

(function($) {
    // disable slideDown/slideUp in IE8 due to margin removal issue
    if ($('html').hasClass('ie8')) {
        $.fn.slideDown = function() {
            return this.show();
        };        
        $.fn.slideUp = function() {
            return this.hide();
        };
    }
})(jQuery);

就我而言,这解决了我的问题。希望这有帮助!