Динамические вкладки, похоже, не имеют идентификаторов

#jquery #jquery-ui #jquery-ui-tabs #jquery-tabs

#jquery #jquery-пользовательский интерфейс #jquery-ui-tabs #jquery-tabs

Вопрос:

Я динамически добавляю вкладки на свою страницу, используя следующий скрипт:

 var tabs = $("#tabs");
$.each(results, function(index, item) {
    tabs.tabs("add","get_tab_content.aspx?tab="   item.key, item.value);
});
  

где results содержатся данные json.

Все это работает, за исключением случаев, когда я пытаюсь получить вкладку id с помощью следующего скрипта:

 $("li.ui-tabs-selected").attr("id")
  

Эта строка ничего не возвращает, как будто для вкладок в цикле выше не задан id .

Однако эта строка отлично работает, если я вручную набираю добавить вкладки и идентификаторы, например

 <div id="tabs">
    <ul>
        <li class="tab" id="tab_1"><a href="tab0.htm">Home</a></li>
        <li class="tab" id="tab_2"><a href="tab1.htm">Default</a></li>
    </ul>
</div>
  

Для этого HTML-кода вручную строка $("li.ui-tabs-selected").attr("id") возвращает либо tab_1 , либо tab_2 .

Как мне получить id название вкладки при создании вкладок с помощью цикла выше? Я предполагаю, что мне нужно указывать им идентификаторы при добавлении вкладок? Но это всего лишь предположение. Если это так, как мне присвоить им идентификаторы?

Комментарии:

1. Обычно это происходит, когда вы вызываете «$ («li.ui-tabs-selected»).attr(«id»)» перед созданием вкладки. Можете ли вы показать больше исходного кода в jsfiddle?

Ответ №1:

Он не добавляет id s, потому что в этом нет необходимости.

Для их идентификации используется индекс вкладки.

Зачем вам нужно иметь для них идентификатор?


Обновить

Чтобы добавить идентификатор для каждой вкладки, вы можете сделать следующее (предполагая, что вы используете код, который вы указали в своем вопросе, где новые вкладки добавляются в конце по умолчанию)

 tabs.tabs("add","get_tab_content.aspx?tab="   item.key, item.value)
    .find('>ul>li:last') // find the last li element, the tab we just added
    .attr('id',item.id); // use whatever id you want here ..i assumed you have an id in your json..
  

пример:http://jsfiddle.net/gaby/7Grb8 /


обновление 2

если вы хотите сделать это с индексом, то вам следует использовать var selected = tabs.tabs( "option", "selected" ); как описано в документах

Комментарии:

1. Таким образом, я могу определить, какая вкладка назначена конкретному пользователю, поскольку каждая вкладка имеет разное содержимое в зависимости от пользователя, вошедшего в систему. Значит ли это, что невозможно добавить идентификатор к динамической вкладке?

2. Если невозможно добавить идентификатор к динамической вкладке, как мне получить индекс выбранной вкладки? Это просто означает, что мне придется немного изменить структуру моего приложения, чтобы использовать индекс вместо идентификатора.

3. @oshirowanen, обновленный ответ с некоторым кодом о том, как добавить идентификатор.

4. @Gaby, она же Дж. Петриоли, спасибо за код. Можно ли с уверенностью предположить, что я смогу получить идентификатор, как только я реализовал ваш код, используя $("li.ui-tabs-selected").attr("id") для динамических вкладок? Да, ключевое значение из json — это идентификатор, который я хочу, чтобы вкладки имели.

5. @Gaby, она же Дж. Петриоли, работает отлично. Спасибо за помощь.