2009-08-25 2 views
5

Проблема. У меня есть несколько вкладок, их содержимое загружается через ajax, поэтому панели id div на вкладках назначаются динамически. У меня есть форма в одном, ajaxified по this jquery plugin функцию обратного вызова, связанного с событием tabs.load я передать ему один параметр, ui.panel, так что ajaxForm() знает, где цель, чтобы загрузить результат:Как получить выбранный элемент панели вкладок в вкладках JQuery UI?

function initAjaxForms(loadtab) 
{ 
    $('form').ajaxForm({target:loadtab, success:initAjaxForms}); 
} 

Это отлично работает, ЗА ИСКЛЮЧЕНИЕМ, когда я отправляю форму, и PHP возвращает ее как недействительную, я больше не могу ее использовать (конечно, функция вызывается без параметра loadtab). идеальным решением было бы иметь больше возможностей для вкладок, чтобы я мог сделать что-то вроде этого:

function initAjaxForms() 
{ 
    var selected = $('tabs').tabs('option', 'selectedpanel'); 
    $('form').ajaxForm({target:selectedpanel, success:initAjaxForms}); 
} 

но это, очевидно, не так. Есть идеи?

+0

Заменить «selectedpanel» с «активным» –

ответ

17

Выберите .ui-ушки-панель, которая не скрыта с .ui-закладками скрытием:

var selectedPanel = $("#tabs div.ui-tabs-panel:not(.ui-tabs-hide)"); 
+2

Это стоит добавить, как синтаксический метод сахара в основной код ... –

+0

Хороший сниппет, спасибо. +1 –

+7

Должно быть обновлено: var selectedPanel = $ ("# tabs div.ui-tabs-panel: visible"); – EliSherer

1

В конце концов я понял это с небольшой хак, но я чувствую, что это не идеальное решение:

function initAjaxForms() 
{ 
    var selected = $('#tabs').tabs('option', 'selected'); 
    var selectedtab = '#tabs > div:eq('+selected+')'; 
    var selectedtabelement = $(selectedtab).get(0); 

    $('form').ajaxForm({ target:selectedtabelement, success:initAjaxForms}); 

} 

кто с лучшей идеей?

1

Я был с этой самой проблемой, и в то время как это старый вопрос, это тот, который привел меня к этому ответу, который работает:

var selectedPanel = $("#yw1 div.ui-tabs-panel:not(:has(.ui-tabs-hide))"); 
1
function getSelectedTab(tabID){ 
    return $(tabID).find($(tabID+" .ui-tabs-nav .ui-tabs-selected a").attr('href')); 
} 
var selectedPanel = getSelectedTab('#tabs'); 

Это один получит вас объект выбранной вкладки панели.

1

Вот более простой вариант:

function getSelectedTab(tabID){ 
    return $(tabID).find("[aria-expanded=true]"); 
} 

var selectedPanel = getSelectedTab('#tabs'); 
11

Может быть jqueryUI изменилось, принятый ответ не работает для меня. Вот что работает:

$("#tabs div.ui-tabs-panel[aria-hidden='false']") 
+1

Отличный намек! Работает как шарм с jQuery 1.9.1! Человек, которого ты спас мой день, чувак! – drpelz

+0

спасибо, tyler, это работает в 1.11 ... я тянул свои волосы в проходе несколько дней ... darn – sasori

Смежные вопросы