この特定の質問は 前に尋ねた でしたが、jQuery UI Tabs
プラグインでbind()
イベントを使用しても結果が得られません。
タブがクリックされたときにアクションを実行するには、新しく選択したタブのindex
が必要です。 bind()
を使用すると、選択イベントにフックできますが、現在選択されているタブを取得する通常の方法は機能しません。新しいインデックスではなく、以前に選択したタブインデックスを返します。
var selectedTab = $("#TabList").tabs().data("selected.tabs");
現在選択されているタブを取得するために使用しようとしているコードは次のとおりです。
$("#TabList").bind("tabsselect", function(event, ui) {
});
このコードを使用すると、uiオブジェクトがundefined
に戻ります。ドキュメントから、これは、ui.tabを使用して新しく選択されたインデックスにフックするために使用しているオブジェクトである必要があります。私はこれを最初のtabs()
呼び出しで、またそれ自体で試しました。ここで何か間違ったことをしていますか?
1.9より前のJQuery UIバージョンの場合:event
のui.index
が必要です。
JQuery UI 1.9以降:以下のGiorgio Lupariaによる answer を参照してください。
タブイベントのコンテキスト外からタブインデックスを取得する必要がある場合は、これを使用します。
function getSelectedTabIndex() {
return $("#TabList").tabs('option', 'selected');
}
更新:バージョン1.9から「選択」が「アクティブ」に変更されました
$("#TabList").tabs('option', 'active')
UPDATE[日08/26/2012]この回答は非常に人気があるため、本格的なブログ/チュートリアルにすることにしました
My Blog Here にアクセスして、jQueryUIのtabsの操作に関する最新の簡単なアクセス情報を参照してください。
(ブログにも) 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 ....
PS。 iframe変数を使用してから.find( '。ui-tabs-panel:not(.ui-tabs-hide)')を使用すると、フレーム内の選択したタブに対しても簡単にこれを行うことができます。覚えておいて、jQueryはすでにすべてのハードワークを行っており、車輪を再発明する必要はありません!
ただ拡張する(更新)
「ビューに複数のタブ領域がある場合はどうなりますか?」という質問が寄せられました。繰り返しますが、単純に考えて、同じ設定を使用しますが、IDを使用してどのタブを保持するかを識別します。
たとえば、次の場合:
$('#example-1').tabs();
$('#example-2').tabs();
そして、2番目のタブセットの現在のパネルが必要です。
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以降を使用している場合は、関数内でi.newTab.index()にアクセスし、必要なものを取得できます。
以前のバージョンでは、i.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());
}
});
使用すべきです。これは私のためにうまく機能しています;-)
これを行う最も簡単な方法は
$("#tabs div[aria-hidden='false']");
インデックス用
$("#tabs div[aria-hidden='false']").index();
アクティブタブインデックスを見つけてアクティブタブをポイントする場合
最初にアクティブインデックスを取得する
var activeIndex = $("#panel").tabs('option', 'active');
次に、cssクラスを使用してタブコンテンツパネルを取得します
// this will return the html element
var element= $("#panel").find( ".ui-tabs-panel" )[activeIndex];
これをさらに使用するためにjQueryオブジェクトにラップしました
var tabContent$ = $(element);
ここで、クラス.ui-tabs-nav
はナビゲーションに関連付けられ、.ui-tabs-panel
はタブコンテンツパネルに関連付けられた2つの情報を追加します。 jquery ui Webサイトのこのリンクデモでは、このクラスが使用されていることがわかります- http://jqueryui.com/tabs/#manipulation
誰かがiframe内からタブにアクセスしようとした場合、それが不可能であることに気付くかもしれません。タブのdiv
は、非表示または非表示として、選択済みとしてマークされることはありません。リンク自体は、選択済みとしてマークされた唯一のピースです。
<li class="ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-focus"><a href="#tabs-4">Tab 5</a></li>
以下は、リンクのhref
値を取得します。この値は、タブコンテナのIDと同じである必要があります。
jQuery('.ui-tabs-selected a',window.parent.document).attr('href')
これは次の場所でも機能するはずです:$tabs.tabs('option', 'selected');
単にタブのインデックスを取得する代わりに、タブの実際のIDを提供するという意味で優れています。
$( "#tabs" ).tabs( "option", "active" )
その後、0のタブのインデックスがあります
シンプルな
下のコードがそのトリックをしていることがわかりました。新しく選択されたタブインデックスの変数を設定します
$("#tabs").tabs({
activate: function (e, ui) {
currentTabIndex =ui.newTab.index().toString();
}
});
以下を試してください:
var $tabs = $('#tabs-menu').tabs();
var selected = $tabs.tabs('option', 'selected');
var divAssocAtual = $('#tabs-menu ul li').tabs()[selected].hash;
次の投稿の回答の下に投稿できます
var selectedTabIndex= $("#tabs").tabs('option', 'active');
選択したタブインデックスを取得する別の方法は次のとおりです。
var index = jQuery('#tabs').data('tabs').options.selected;
$("#tabs").tabs({
load: function(event, ui){
var anchor = ui.tab.find(".ui-tabs-anchor");
var url = anchor.attr('href');
}
});
rl変数では、現在のタブのHREF/URLを取得します
'<input type="hidden" id="sel_tab" name="sel_tab" value="" />'
のような隠し変数を取り、各タブのonclickイベントで...
<li><a href="#tabs-0" onclick="document.getElementById('sel_tab').value=0;" >TAB -1</a></li>
<li><a href="#tabs-1" onclick="document.getElementById('sel_tab').value=1;" >TAB -2</a></li>
投稿ページで「sel_tab」の値を取得できます。 :)、シンプル!!!
$("#tabs").tabs({
activate: function(event, ui) {
new_index = ui.newTab.index()+1;
//do anything
}
});
ui.newTab.index()
がすべての状況(ローカルおよびリモートのタブ)で使用できるようにする場合は、activate関数で- ドキュメント 言います:
$("#tabs").tabs({
activate: function(event, ui){
alert(ui.newTab.index());
// You can also use this to set another tab, see fiddle...
// $("#other-tabs").tabs("option", "active", ui.newTab.index());
},
});