I have a page containing a set of jQuery tabs. All tabs point to the same target div, but load it using other content via ajax. When I perform the initial full page load, I need to set the active tab differently depending on various factors. The content in the target div is already configured on the server for this boot, so I don’t need to click a tab, I just need to set the correct tab to "selected". I tried to set the class of the corresponding "li" html element to "ui-tabs-selected". This has the initial desired effect, but after loading the page, and then when you select another tab, the previously selected one does not turn off, leaving two tabs.
So, does anyone know an alternative way to pre-select a tab (without forcing it to click) or a solution to the weird behavior selected by "ui-tabs-selected" that I see.
Thanks.
<script type="text/javascript"> $(function() { $("#panelTabs").tabs({ ajaxOptions: { error: function(xhr, status, index, anchor) { $(anchor.hash).html("Couldn't load this tab. We'll try to fix this as soon as possible."); } } }); $("#panelTabs").tabs({ select: function(event, ui) { getPage('hps.aspx?cmd=zz_' + ui.tab.id, 'panelA'); } }); }); </script>
And the C # snippet that UL creates:
StringBuilder tabsLiteral = new StringBuilder(); tabsLiteral.Append("<ul>"); foreach (KeyValuePair<string, Tab> kvp in tabs) { tabsLiteral.Append("<li>"); // Note - the kvp.Value.URI determines what should happen when the Tab is clicked tabsLiteral.Append("<a id=\"" + kvp.Value.URI + "\" href=\"#panelTabs\">" + kvp.Value.Caption + "</a>"); tabsLiteral.Append("</li>"); } tabsLiteral.Append("</ul>"); _panelTabs.Controls.Add(new LiteralControl(tabsLiteral.ToString())); HtmlGenericControl ctl = new HtmlGenericControl(); StringBuilder html = new StringBuilder(); html.Append("<script type=\"text/javascript\">"); html.Append("$(\"#panelTabs\").tabs({selected: 2});"); html.Append("</script>"); ctl.InnerHtml = html.ToString(); _panelTabs.Controls.Add(ctl);
Another version:
StringBuilder tabsLiteral = new StringBuilder(); tabsLiteral.Append("<ul>"); foreach (KeyValuePair<string, Tab> kvp in tabs) { string active = ""; if (currentTabCaption == kvp.Value.Caption) { //active = " class=\"ui-tabs-selected\""; } tabsLiteral.Append("<li" + active + ">"); // Note - the kvp.Value.URI determines what should happen when the Tab is clicked tabsLiteral.Append("<a id=\"" + kvp.Value.URI + "\" href=\"#panelTabs\">" + kvp.Value.Caption + "</a>"); tabsLiteral.Append("</li>"); } tabsLiteral.Append("</ul>"); _panelTabs.Controls.Add(new LiteralControl(tabsLiteral.ToString())); HtmlGenericControl ctl = new HtmlGenericControl(); StringBuilder html = new StringBuilder(); html.Append("<script type=\"text/javascript\">"); //html.Append("$(\"#panelTabs\").tabs('option','selected', 2);"); html.Append(@"$(function() { alert('initialising tabs'); $(""#panelTabs"").tabs({ ajaxOptions: { error: function(xhr, status, index, anchor) { $(anchor.hash).html(""Couldn't load this tab. We'll try to fix this as soon as possible.""); } }, select: function(event, ui) { getPage('hps.aspx?cmd=zz_' + ui.tab.id, 'panelA'); } }); });"); html.Append("$(\"#panelTabs\").tabs({selected: 2});"); html.Append("</script>"); ctl.InnerHtml = html.ToString(); //_panelTabs.Controls.Add(ctl); Page.Controls.Add(ctl);
jquery tabs jquery-ui-tabs
Deh
source share