jQuery UI 标签 - 如何获取当前选择的标签索引

IT技术 javascript jquery jquery-ui tabs jquery-ui-tabs
2021-02-08 16:29:25

我知道之前已经问过这个特定问题,但是使用插件bind()上的事件我没有得到任何结果jQuery UI Tabs

我只需要index新选择的选项卡的 的 来在单击选项卡时执行操作。bind()允许我挂入选择事件,但我通常获取当前选定选项卡的方法不起作用。它返回先前选择的标签索引,而不是新的:

var selectedTab = $("#TabList").tabs().data("selected.tabs");

这是我试图用来获取当前选择的选项卡的代码:

$("#TabList").bind("tabsselect", function(event, ui) {

});

当我使用此代码时,ui 对象回来了undefined从文档中,这应该是我用来使用 ui.tab 连接到新选择的索引的对象。我已经在最初的tabs()电话中尝试过这个,也曾单独尝试过我在这里做错了吗?

6个回答

如果您需要从选项卡事件的上下文之外获取选项卡索引,请使用以下命令:

function getSelectedTabIndex() { 
    return $("#TabList").tabs('option', 'selected');
}

更新:从版本 1.9 'selected' 更改为 'active'

$("#TabList").tabs('option', 'active')
看起来这实际上给出了默认选项卡,而不是当前选择的选项卡。我错过了什么?42票不会错吧? jqueryui.com/demos/tabs/#option-selected
2021-03-15 16:29:25
是的,这个解决方案有帮助。谢谢@Contra
2021-03-23 16:29:25
在 jQuery UI 1.9 版中,'selected' 选项已重命名为 'active'(参见jqueryui.com/changelog/1.9.0
2021-03-26 16:29:25
无论如何,这似乎是我所需要的。
2021-04-14 16:29:25

对于 1.9 之前的 JQuery UI 版本ui.index来自event您想要的。

对于 JQuery UI 1.9 或更高版本:请参阅下面 Giorgio Luparia回答

Cheers,Q 提到 ui 对象为空,因此 ui.index 目前将失败。我认为答案可能不像包括那个那么简单。
2021-03-22 16:29:25
这是一个完美的答案,感谢您提供的精彩示例!我试图在一次拍摄中完成所有事情,但没有奏效。在我将其拆分后,一切都按宣传的那样进行。
2021-04-01 16:29:25
答案就在那里 - 使用 ui.index 属性来获取 tabselect 事件中的当前索引.....
2021-04-01 16:29:25
答案应该更新,因为它不适用于 JQuery UI 1.9.0。你应该根据升级指南ui.newTab.index()(改变ui.index jqueryui.com/upgrade-guide/1.9/...
2021-04-04 16:29:25
非常好的答案!我在网站上汇总了您所做的工作,只是为了让您更容易获得答案。
2021-04-14 16:29:25

更新[ Sun 08/26/2012 ] 这个答案变得如此流行,以至于我决定将它变成一个完整的博客/教程
请访问我的博客在这里查看最新的易于访问的信息,以便在 jQueryUI 中 使用选项卡
也包括在内(也在博客中)是一个jsFiddle


更新!请注意:在较新版本的 jQueryUI (1.9+) 中,ui-tabs-selected已替换为ui-tabs-active. !!!


我知道这个线程很旧,但我没有看到提到的是如何从“选项卡事件”以外的其他地方获取“选定选项卡”(当前下拉面板)。我确实有一个简单的方法...

var curTab = $('.ui-tabs-panel:not(.ui-tabs-hide)');

并且要轻松获取索引,当然还有网站上列出的方式...

var $tabs = $('#example').tabs();
var selected = $tabs.tabs('option', 'selected'); // => 0

但是,您可以使用我的第一种方法来轻松获取索引以及您想要的有关该面板的任何内容......

var curTab = $('.ui-tabs-panel:not(.ui-tabs-hide)'),
    curTabIndex = curTab.index(),
    curTabID = curTab.prop("id"),
    curTabCls = curTab.attr("class");
        //  etc ....

附注。如果您使用 iframe 变量然后使用 .find('.ui-tabs-panel:not(.ui-tabs-hide)'),您会发现对框架中的选定选项卡执行此操作也很容易。请记住,jQuery 已经完成了所有艰苦的工作,无需重新发明轮子!

只是为了扩展(更新)

向我提出了一个问题,“如果视图上有多个选项卡区域怎么办?” 再一次,想想简单,使用我相同的设置,但使用 ID 来标识您想要获取的选项卡。

例如,如果您有:

$('#example-1').tabs();
$('#example-2').tabs();

并且您想要第二个选项卡集的当前面板:

var curTabPanel = $('#example-2 .ui-tabs-panel:not(.ui-tabs-hide)');

如果你想要 ACTUAL 选项卡而不是面板(真的很简单,这就是为什么我之前没有提到它,但我想我现在会提到,只是为了彻底)

// for page with only one set of tabs
var curTab = $('.ui-tabs-selected'); // '.ui-tabs-active' in jQuery 1.9+

// for page with multiple sets of tabs
var curTab2 = $('#example-2 .ui-tabs-selected'); // '.ui-tabs-active' in jQuery 1.9+

再次记住,jQuery 做了所有艰苦的工作,不要想得那么辛苦。

太好了,谢谢!如果您愿意,您也可以将此作为对stackoverflow.com/q/1864219/11992的回答
2021-03-15 16:29:25
在 jQuery UI 1.9 版中,'selected' 选项已重命名为 'active'(请参阅 jqueryui.com/changelog/1.9.0)。
2021-03-18 16:29:25
这正是我需要的 - 谢谢!
2021-03-28 16:29:25

如果您使用 JQuery UI 版本 1.9.0 或更高版本,您可以在您的函数中访问ui.newTab.index()并获得您需要的内容。

对于早期版本,请使用ui.index

如果你能用一些额外的细节充实你的答案,那就太好了。
2021-03-29 16:29:25
var $tabs = $('#tabs-menu').tabs();
// jquery ui 1.8
var selected = $tabs.tabs('option', 'selected');
// jquery ui 1.9+
var active = $tabs.tabs('option', 'active');