slideToggle和:可见

Kie*_*ron 15 jquery jquery-1.3.2

使用该sliderToggle方法时,:visible表达式似乎永远不会返回除true之外的任何内容.

如果我手动使用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...
});
Run Code Online (Sandbox Code Playgroud)

工作范例:

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...
});
Run Code Online (Sandbox Code Playgroud)

一些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>
Run Code Online (Sandbox Code Playgroud)

我假设slideToggle不做show/ hide- 是否有其他我可以检查?

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

谢谢,K

sea*_*lea 30

您的第一个(非工作)代码片段将:visible在slideToggle处于转换中期时进行测试(更确切地说,它在转换开始后进行测试.)无论您是打开还是关闭,中间转换状态都将是:visible-所以你永远得到true.

.is(":visible")在打电话前尝试检查slideToggle

  • 当然!谢谢,感觉就像现在的布偶 - 通过调用var isVisible =!notes.is(":visible"); 在slideToggle之前,我得到了所需的答案.谢谢! (3认同)