jQuery v1.11和v2.1 slideUp和slideDown不尊重css显示属性

时间:2014-02-19 22:07:56

标签: jquery

我注意到从jQuery版本1.9升级到版本1.11后,slideUpslideDownslideToggle等方法的行为在应用于非块元素时发生了变化(即,span),其中指定了css display值。在以前的版本中,例如v1.9,display值将被设置(在动画完成之后)到我们在CSS定义中指定的任何内容。在版本1.11和2.1中,display值不以这种方式受到尊重(至少不适用于非块元素)。

这是jQuery 1.11和2.1中的新错误吗?我看到在旧版本的jQuery中,其他人报告了类似的问题,例如thisthis。这些问题似乎已被报道为固定的,而且根据我们使用jQuery 1.9的经验,似乎就是这种情况。但似乎它在1.11和2.1中再次被打破。这是一个简单的可重现的例子:

HTML:

<span class="b">block</span> <!-- notice this is not a block-level element... -->
<a href="#" class="toggle">toggle it</a>

CSS:

.b {
    display:block; /* ... but I need it to display like a block-level element */
    background:red;
}

使用Javascript:

var isExpanded = true;

$(".toggle").bind("click", function(){
    if(isExpanded) {   
        $(".b").slideUp();
        isExpanded = false;
    }
    else {
        $(".b").slideDown();
        isExpanded = true;
    }    
});

在这个使用jQuery 1.9的jsFiddle example中查看它。

这会在切换打开时产生预期结果:

result 1

不幸的是,jQuery版本1.11(或2.1)不尊重我们的display值,而是将其设置为inline-block

enter image description here

这可以在this jsFiddle example中看到,其中唯一改变的是jQuery版本。

我是否错过了jQuery的声明,告诉我们这个新版本的行为会有所不同? These release notes似乎没有这么说,表明这次升级......

  

“你的代码不应该破坏,它应该运行得更快一点。”

注意:我意识到将这个简单示例中的span更改为div可能会解决此问题,但有时我们需要使用给定块的span级别样式(即,您不能在div内嵌套span),并且我们有一个包含许多此类案例的大型生产应用程序。

2 个答案:

答案 0 :(得分:0)

滑动后display属性变为auto。添加css

width: 100%;

答案 1 :(得分:0)

我最终向jQuery提交了this bug,他们确认这是一个错误。他们声称在2014年4月30日有fixed it,里程碑版本为1.11.1 / 2.1.1(我还没有能够测试他们的修复确认)。