我知道之前已经问过这个具体问题,但是我没有bind()
在jQuery UI Tabs
插件上使用该事件获得任何结果.
index
单击选项卡时,我只需要新选择的选项卡即可执行操作.bind()
允许我挂钩到select事件,但我通常的获取当前选定选项卡的方法不起作用.它返回先前选择的选项卡索引,而不是新选项卡索引:
var selectedTab = $("#TabList").tabs().data("selected.tabs");
以下是我尝试用于获取当前所选标签的代码:
$("#TabList").bind("tabsselect", function(event, ui) { });
当我使用这段代码时,ui对象会回来undefined
.从文档中,这应该是我用来使用ui.tab挂钩到新选择的索引的对象.我在最初的tabs()
电话会议上也尝试了这一点.我在这里做错了吗?
如果需要从tabs事件的上下文之外获取选项卡索引,请使用以下命令:
function getSelectedTabIndex() { return $("#TabList").tabs('option', 'selected'); }
更新:从版本1.9'选中'更改为'有效'
$("#TabList").tabs('option', 'active')
对于1.9之前的JQuery UI版本:ui.index
来自event
你想要的.
对于JQuery UI 1.9或更高版本:请参阅下面的Giorgio Luparia 的答案.
更新 [ Sun 08/26/2012 ]这个答案已经变得如此受欢迎,我决定将它变成一个成熟的博客/教程
请访问我的博客在这里查看最新的简单访问信息,以使用jQueryUI中的 选项卡
还包括(在博客中也是)jsFiddle
更新!请注意:在较新版本的jQueryUI(1.9+)中,ui-tabs-selected
已被替换为ui-tabs-active
.!
我知道这个帖子已经老了,但是我没有看到提到的是如何从"tab events"以外的某个地方获取"selected tab"(当前是下拉面板).我确实有一个简单的方法......
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 ....
PS.如果您使用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做了所有的努力,不要那么认真.
如果您使用的是JQuery UI 1.9.0或更高版本,则可以在函数内访问ui.newTab.index()并获得所需内容.
对于早期版本,请使用ui.index.
你什么时候试图访问ui对象?如果您尝试在绑定事件之外访问它,则ui将是未定义的.另外,如果这一行
var selectedTab = $("#TabList").tabs().data("selected.tabs");
在这样的事件中运行:
$("#TabList").bind("tabsselect", function(event, ui) { var selectedTab = $("#TabList").tabs().data("selected.tabs"); });
selectedTab将等于该时间点的当前选项卡("上一个").这是因为在单击的选项卡成为当前选项卡之前调用"tabsselect"事件.如果您仍然希望以这种方式执行此操作,则使用"tabsshow"将导致selectedTab等于单击的选项卡.
但是,如果您想要的只是索引,那似乎过于复杂.来自事件内的ui.index或$("#TabList").事件之外的tabs().data("selected.tabs")应该是您需要的全部内容.
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');
这改变了版本1.9
就像是
$(document).ready(function () { $('#tabs').tabs({ activate: function (event, ui) { var act = $("#tabs").tabs("option", "active"); $("#<%= hidLastTab.ClientID %>").val(act); //console.log($(ui.newTab)); //console.log($(ui.oldTab)); } }); if ($("#<%= hidLastTab.ClientID %>").val() != "") { $("#tabs").tabs("option", "active", $("#<%= hidLastTab.ClientID %>").val()); } });
应该使用.这对我来说很好;-)