在 jQuery 选项卡 UI 中的活动选项卡上显示另一个 div

发布于 2024-10-21 18:33:45 字数 1142 浏览 8 评论 0原文

我想知道当 jQuery UI 选项卡中的一系列选项卡处于活动状态时如何显示另一个 div。

tabs-1 包含少量文本,而其他选项卡 2-4 包含更多文本,因此这些选项卡(当处于活动状态时)会延伸至页面下方。我想要做的是,当选项卡 2 到 4 中的任何一个处于活动状态时,能够在 #myotherdiv 中填充更多内容。

因此,如果 tabs-3 处于活动状态,我如何才能获得另一个 div,即 .extradiv 以显示在 #sidebar 中的 #tabs div 之外?

我是否使用 jQuery 挂接到选项卡的活动状态以在 #sidebar 中显示 .extradiv ?还有其他方法吗?

2011 年 4 月 26 日答案如下

基本 jQuery UI 选项卡结构

<div id="tabs">
<ul>
<li><a href="#tabs-1"></a></li>
<li><a href="#tabs-2"></a></li>
<li><a href="#tabs-3"></a></li>
<li><a href="#tabs-4"></a></li>
</ul>

<div id="tabs-1">
"short" content
</div>

<div id="tabs-2">
"long" content
</div>

<div id="tabs-3">
"long" content
</div>

<div id="tabs-4">
"long" content
</div>

</div>

侧边栏

<div id="sidebar" class="widget">

<div class="extradiv">content</div>

</div>

I'm wondering how to show another div when a range of tabs in jQuery UI Tabs is active.

tabs-1 contains a small amount of text, while the other tabs 2-4 contain much more text, so those tabs - when active - extend far down the page. What I'd like to do is be able to populate the sidebar with more content in #myotherdiv when any of the tabs 2 through 4 are active.

So if tabs-3 is active, how do I also get another div, i.e. .extradiv to show outside the #tabs div in the #sidebar?

Do I hook into the active state of the tab with jQuery to show the .extradiv in #sidebar? Some other way?

4/26/11 answer below works

Basic jQuery UI tab structure

<div id="tabs">
<ul>
<li><a href="#tabs-1"></a></li>
<li><a href="#tabs-2"></a></li>
<li><a href="#tabs-3"></a></li>
<li><a href="#tabs-4"></a></li>
</ul>

<div id="tabs-1">
"short" content
</div>

<div id="tabs-2">
"long" content
</div>

<div id="tabs-3">
"long" content
</div>

<div id="tabs-4">
"long" content
</div>

</div>

Sidebar

<div id="sidebar" class="widget">

<div class="extradiv">content</div>

</div>

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

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

发布评论

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

评论(4

明天过后 2024-10-28 18:33:45

load 事件处理程序仅在动态加载选项卡时触发。请改用 show 事件:

    $('#tabs').tabs({
        show: function (event, ui) {
            var height = $(ui.panel).height();
            if (height > 200) {
                $('#sidebar .extradiv').show();
            } else {
                $('#sidebar .extradiv').hide();
            }
        }
    });

The load event handler only fires when the tab is loaded dynamically. Use the show event instead:

    $('#tabs').tabs({
        show: function (event, ui) {
            var height = $(ui.panel).height();
            if (height > 200) {
                $('#sidebar .extradiv').show();
            } else {
                $('#sidebar .extradiv').hide();
            }
        }
    });
-小熊_ 2024-10-28 18:33:45

弗雷德的建议似乎有效。你可能错误配置了你的CSS?请参阅此处的演示:http://jsbin.com/ateru6/5

您可以在此处查看源代码: http://jsbin.com/ateru6/5/edit

JavaScript:

$('#sidebar .extradiv').hide();

$tabs = $('#tabs').tabs({
  show: function(event,ui) {
        var height = $(ui.panel).height();
        $('#tabHeight').html(height);
        if (height > 200) {
           $('#sidebar .extradiv').show();
        }
        else {
           $('#sidebar .extradiv').hide();
        }
    }
});

CSS:

  #tabs
  {
    width: 400px;
    margin-left: 6em;
  }

  #sidebar
  {
    position: fixed;
    top: 1em;
    left: 0;
    width: 5em;
    border: 2px solid gray;
    padding: 0.5em;
  }

  #sidebar .extradiv
  {
    color: blue;
  }

  #tabHeight
  {
    overflow: hidden;
    color: red;
    text-overflow: ellipsis;
   }

Fred's suggestion seems to work. You might mis-configured your css? See the demo here: http://jsbin.com/ateru6/5

You can look at the source here: http://jsbin.com/ateru6/5/edit

JavaScript:

$('#sidebar .extradiv').hide();

$tabs = $('#tabs').tabs({
  show: function(event,ui) {
        var height = $(ui.panel).height();
        $('#tabHeight').html(height);
        if (height > 200) {
           $('#sidebar .extradiv').show();
        }
        else {
           $('#sidebar .extradiv').hide();
        }
    }
});

CSS:

  #tabs
  {
    width: 400px;
    margin-left: 6em;
  }

  #sidebar
  {
    position: fixed;
    top: 1em;
    left: 0;
    width: 5em;
    border: 2px solid gray;
    padding: 0.5em;
  }

  #sidebar .extradiv
  {
    color: blue;
  }

  #tabHeight
  {
    overflow: hidden;
    color: red;
    text-overflow: ellipsis;
   }
夜唯美灬不弃 2024-10-28 18:33:45

如果您想让它更加动态,请添加 load 事件处理程序并检查正在加载哪个选项卡(或选项卡的大小)。当选择该选项卡或选项卡大小超过特定阈值时添加额外内容。有关如何为 Tab 小部件添加事件处理程序的更多示例,请参阅 jQuery UI 站点上的文档

$('#tabs').tabs({
    ...
    load: function(event,ui) {
        var height = $(ui.panel).height();
        if (height > _some_fixed_height) {
           $('.sidebar .extra_content').show();
        }
        else {
           $('.sidebar .extra_content').hide();
        }
    }
});

Add load event handler and check which tab is being loaded (or the size of the tab) if you want to make it more dynamic. Add the extra content when that tab is chosen or the tab size exceeds a certain threshold. See the documentation on the jQuery UI site for more examples of how to add event handlers for the Tab widget.

$('#tabs').tabs({
    ...
    load: function(event,ui) {
        var height = $(ui.panel).height();
        if (height > _some_fixed_height) {
           $('.sidebar .extra_content').show();
        }
        else {
           $('.sidebar .extra_content').hide();
        }
    }
});
一瞬间的火花 2024-10-28 18:33:45

This works:

try and see the red div when you go on tab 3

http://jsfiddle.net/Ln4L7/2/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文