SlideToggle 和 :visible

发布于 2024-08-03 16:08:35 字数 1502 浏览 4 评论 0原文

使用 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...
});

工作示例:

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不执行显示/ hide - 还有什么我可以检查的吗?

我已经在 Firefox 3.5、IE 7、8 和 Chrome 4 中尝试过......都得到了相同的结果。

谢谢, K

When using the sliderToggle method, the :visible expression never seems to return anything other than true.

If I manually use show/ hide in conjunction with :visible expression it'll work just fine.

Example of failure:

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...
});

Example of working:

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...
});

Some 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>

I'm assuming that the slideToggle doesn't do a show/ hide - is there something else I can check?

I've tried in Firefox 3.5, IE 7, 8 and Chrome 4...all with the same results.

Thanks,
K

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

み零 2024-08-10 16:08:35

您的第一个(非工作)代码片段将在 slipToggle 处于过渡中时测试 :visible (更准确地说,它在过渡开始后立即对其进行测试。)无论您是打开还是关闭,中间转换状态将为 :visible - 所以你总是得到 true

在调用 slideToggle 之前尝试检查 .is(":visible")

Your first (non-working) code fragment will be testing :visible while slideToggle is mid-transition (more precisely, it tests it just after the transition starts.) Regardless of whether you're opening or closing, the mid-transition state will be :visible - so you always get true.

Try checking .is(":visible") before calling slideToggle

能怎样 2024-08-10 16:08:35

尝试添加一个处理程序。

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

Try adding a handler.

notes.slideToggle ("fast", function() { 
  var isVisible = notes.is(":visible");
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文