2009-08-28 48 views
14

当使用sliderToggle方法时,:visible表达式永远不会返回除true之外的任何内容。slideToggle和:visible

如果我手动使用show/hide:visible表达式一起工作就好了。

失败

jQuery(".fileNode .nodeExpander").click(function() { 
    var notes = jQuery(this).parent().siblings(".fileNotes"); 
    notes.slideToggle ("fast"); 

    var isVisible = notes.is(":visible"); // Always returns true... 

    // Do stuff based on visibility... 
}); 

工作

jQuery(".fileNode .nodeExpander").click(function() { 
    var notes = jQuery(this).parent().siblings(".fileNotes"); 
    var isVisible = notes.is(":visible"); 

    if (isVisible) 
     notes.hide("fast"); 
    else 
     notes.show("fast"); 

    // Do stuff based on visibility... 
}); 

一些HTML代码:

<ul> 
    <li class="fileNode"> 
     <img src="<%= Url.Content ("~/Images/Collapse.png") %>" alt="<%= UIResources.CollpaseAltText %>" class="nodeExpander" /> 
    </li> 
    <li class="fileLink"> 
     <%= Html.ActionLink (file.Name, "Details", new { id = file.FileId }) %> 
    </li> 
    <li class="fileNotes"> 
     <%= file.Description %> 
    </li> 
</ul> 

我假设slideToggle不做a show/hide - 有什么我可以检查?

我试过Firefox 3.5,IE 7,8和Chrome 4 ......都有相同的结果。

感谢, ķ

回答

27

您的第一个(非工作)的代码片段将测试:visible同时的slideToggle是中期过渡(更准确地说,它测试它的转换开始之后。)不管你是否”重新开放或关闭,中间过渡状态将是:visible - 所以你总是得到true

尝试调用slideToggle

+3

当然!谢谢,现在感觉像是一个混淆 - 通过调用var isVisible =!notes.is(“:visible”);在slideToggle之前,我得到所需的答案。谢谢! – Kieron 2009-08-28 08:21:43

+0

这有点违反直觉,但非常有意义。如果我们只有jQuery对象的内部滑动状态... – 2017-05-22 06:31:45

2

尝试添加处理程序之前检查.is(":visible")

notes.slideToggle ("fast", function() { 
    var isVisible = notes.is(":visible"); 
});