2012-11-27 51 views
5

我需要隐藏一个div,并使用此代码,它工作正常:隐藏()与皮(“慢”)

var idObj = $(this).attr('key'); 
var valH = $(this).attr('hideval'); 
var valS = $(this).attr('showval'); 

if ($('div[name='+idObj+']').attr('isdisplay') == 'no') { 
    $('div[name='+idObj+']').children().show("slow"); 
    $('div[name='+idObj+']').attr('isdisplay','yes'); 
    var divTitle = $('div[name='+idObj+']').children().first(); 
    var divArrow = $(this).children().first(); 
    //.attr('src',prefixImg+valH); 

    //divTitle.show(); 
    //divArrow.show(); 
    $(this).children().first().attr('src',prefixImg+valH); 
} else { 

    var divTitle = $('div[name='+idObj+']').children().first(); 
    var divArrow = $('div[name='+idObj+']').children().last(); 
    //.attr('src',prefixImg+valS); 

    $('div[name='+idObj+']').children().hide(); 
    $('div[name='+idObj+']').attr('isdisplay','no'); 

    divTitle.show(); 
    divArrow.show(); 
    $(this).children().first().attr('src',prefixImg+valS); 
} 

我的DIV是隐藏的,标题和箭头重新打开DIV显示。但是,如果我尝试使用隐藏(“缓慢”),当div关闭时divTitle和divArrow不会出现。同样的问题使用隐藏(1000)。

隐藏有和没有“慢”参数之间有区别吗?

感谢, 安德烈

回答

3

$(element).hide()立即隐藏一个元素,其中$(element).hide('slow')将动画化它的消失(缓慢)。

看起来像(虽然我不确定)你想做的东西动画完成。在这种情况下,请执行以下操作:

var that = this; // here to preserve scope for the block below 
$('div[name='+idObj+']').children().hide('slow', function() { 

    // This stuff happens after the hide animation is done. 
    $('div[name='+idObj+']').attr('isdisplay','no'); 

    divTitle.show(); 
    divArrow.show(); 
    $(that).children().first().attr('src',prefixImg+valS); // <= note "that" instead of "this" 

}); 
+1

谢谢埃文!这就是问题所在,出于某种原因,在“缓慢”隐藏之后,对象的范围已经丢失。这解决了我的问题! –

1

根据jQuery的文档

字符串 'fast' 和 '慢' 可以被分别提供给指示 200和600毫秒的持续时间。以毫秒为单位

而且持续时间可以提供给它..

6

从官方网站

匹配的元素将被立即隐藏,没有动画。这大致等同于调用.css('display','none'),除了display属性的值保存在jQuery的数据缓存中,以便稍后可以将显示恢复到其初始值。如果一个元素的显示值为内联,然后被隐藏并显示,它将再次以内联方式显示。

当提供持续时间时,.hide()变为动画方法。 .hide()方法同时动画化匹配元素的宽度,高度和不透明度。当这些属性达到0时,显示样式属性设置为none,以确保该元素不再影响页面的布局。

因此,如果隐藏没有延迟地使用,它立即隐藏没有动画 - 例如,poof。

如果它与时间一起使用,它会变成动画,所以随着时间的推移它会消失。

对于你的问题,很难判断没有相应的html代码。