Загрузка диаграммы с плавающей точкой в обход jquery не полностью решает проблему
Существует известная проблема с загрузкой диаграммы с плавающей точкой на вкладке jquery, которая не является начальной видимой вкладкой:
это было задано здесь: http://osdir.com/ml/jQuery/2009-06/msg02284.html
и ответил с этим решением:
.tabs-hide {
/*display: none;*/
position: absolute;
left: -10000px;
}
Есть еще некоторые проблемы с этим решением.
Допустим, имя вкладки, на которой находится график, называется #tab-1. Вкладки jquery помещают это в строку URL, так что это будет работать изначально при загрузке, но если вы попытаетесь отправить кому-то URL с #tab-1 (или любым именем вкладки в URL) в ссылке, диаграмма не будет видимый. Кто-нибудь видел решение, которое всегда работает, включая случай, когда вкладка также может быть в URL.
3 ответа
Для меня диаграмма работала при доступе к конкретной вкладке напрямую с помощью URL # tab-1, но не тогда, когда вкладка диаграммы изначально не была активной.
Я решил проблему, поместив вызов генерации диаграммы в закладку активации (1):
$('#tabs_container').bind('tabsshow', function(event, ui) {
if (ui.panel.id == "tab-1") {
$.plot(...)
}
})
где '#tabs-container'
а также 'tab-1'
заменяются соответствующими идентификаторами. 'tabsshow'
имя события, к которому нужно привязать
Единственным недостатком этого является то, что график снова отображается каждый раз, когда отображается вкладка. Для меня это не большая проблема, и ее можно обойти, например, используя несколько флаговых переменных для вызова $.plot() только один раз.
(1): второй совет в документах jQuery-ui
В качестве альтернативы, измените CSS класса содержимого вкладки на...
.tab_content {
display:block;
visibility:hidden;
}
... и добавьте следующие добавленные строки (под //HACK!!! ...) в ваш файл jscript.js..
$(document).ready(function() {
// When user clicks on tab, this code will be executed
$("#tabs li").click(function() {
// First remove class "active" from currently active tab
$("#tabs li").removeClass('active');
//HACK!!! As the tabs_content HAS to initially be set to display:block in order for the flot graphs to be plotted correctly,
// we need to manually change the visibility attribute for the tabs_content each time another tab is selected as active.
//This assigns a variable to the tab_content of the currently active tab and changes the css visibility attribute to hidden.
var old_tab = $("#tabs li").find("a").attr("href");
$(old_tab).css('visibility', 'hidden');
// Now add class "active" to the selected/clicked tab
$(this).addClass("active");
// Hide all tab content
$(".tab_content").hide();
// Here we get the href value of the selected tab
var selected_tab = $(this).find("a").attr("href");
//HACK!!! Change the css visibility attribute of the newly selected tab to visible
$(selected_tab).css('visibility', 'visible');
$(selected_tab).fadeIn();
return false;
});
});
... и обеспечение вашего aspx выглядит как...
<div id="tabs" >
<ul id="Ul1" >
<li class="active"><a href="#tab1">Main</a></li>
<li><a href="#tab2">tab2</a></li>
<li><a href="#tab3">tab3</a></li>
<li><a href="#tab4">tab4</a></li>
<li><a href="#tab5">tab5</a></li>
</ul>
</div>
<div style="width:100%;float:left;">
<div id="tabs_content_container">
<div id="tab1" class="tab_content" style="visibility:visible">
content for tab 1
</div>
<div id="tab2" class="tab_content" >
</div>
</div>
</div>
... ваши графики будут отображаться правильно и когда выбрана соответствующая вкладка!
Главное, что вам нужно запомнить, - это поместить свои вкладки js прямо перед концом тега body.