2013-05-20 2 views
2

в моем проекте asp.net У меня есть панель и на ней вкладка jquery tabs. Изначально панель скрыта, и она отображается, если я нажму кнопку.JQuery вкладки на начальной скрытой панели asp.net

Это очень простой код:

<div id="tabs"> 
     <ul id="none"> 
      <li><a href="#tabs-1">Asset details</a></li> 
      <li><a href="#tabs-2">Structure details</a></li> 
      <li><a href="#tabs-4">Audit Info</a></li> 
     </ul> 

     <div id="tabs-1">Some Content for tab 1</div> 
     <div id="tabs-2">Some Content for tab 2</div> 
     <div id="tabs-3">Some Content for tab 3</div> 
    </div> 

И JQuery код:

function myfunction() { 

$("#tabs").tabs(); 

}

Проблема заключается в том, что, когда я показываю панель язычки ДИВ видна, но не отформатирована.

Все правильно работать, если я установить задержку MyFunction:

function myfunction() { 

//$("#tabs").tabs(); 

setTimeout(function() { 
    $("#tabs").tabs(); 
}, 500); 

}

Есть ли способ решить эту проблему в более безопасным способом?

Здесь недостающий код:

Кнопка, которая показывает свою панель по щелчку: за

<my:RoundedButton ID="BillingDataButton" runat="server" 
SkinID="Small" 
Text="Billing data" 
OnClick="BillingDataButton_Click" 

/>

Код:

protected void BillingDataButton_Click(object sender, EventArgs e) 
    { 

     BillingDataPanel.Show(); 

    } 

Я судимое это (спасибо Майкл):

$(document).ready(function() { 
$("#tabs").tabs(); 

});

Но когда я нажимаю мою кнопку и панель отображается результат является:

enter image description here

Обновление - одно из возможных решений

добавили этот код в моей странице asp.net:

<script type="text/javascript"> 

var prm = Sys.WebForms.PageRequestManager.getInstance(); 
prm.add_endRequest(function (s, e) { 

    myfunction(); 

}); 

Это гарантирует, что код jquery для отображения вкладки будет выполнен в конце запроса. В этом случае запрос setTimeout не запрашивается.

Пожалуйста, сообщите мне, если exixt лучшее решение.

+0

Я не вижу код, который показывает div, но если я правильно понимаю, вы должны сначала создать вкладки, а затем показать div. –

+0

Привет, Клаудио, я добавил недостающий код. – jacktric

ответ

0

Это ожидаемое поведение на самом деле, но есть чистое решение:

$(document).ready(function() { 
    $("#tabs").tabs(); 
}); 

Вы видите, Jquery не может сделать все изменения до того, как DOM полностью доступен. Вот почему задержка работает для вас, но это случайность. Если бы это было запущено в гораздо более медленном браузере, это бы потерпело неудачу.

Однако мероприятие document.ready является гораздо более стабильным, предпочтительным и приемлемым решением среди сообщества. На самом деле, вы действительно не должны делать что-нибудь в jQuery вне этого метода до инициализация.

+0

Привет, Майкл, спасибо за ваш ответ. Если я попрошу ваше решение, когда я покажу панель (изначально она скрыта), я вижу вкладку div, но не отформатирован. Как будто оператор $ ("# tabs"). Tabs() не был введен. – jacktric

+0

@jacktric, извините немного синтаксической ошибки, см. Мое редактирование. –

+0

не беспокойтесь, я исправляю ваш код сам, но проблема остается. Это похоже на то, что код javascript должен выполняться принудительно после показа панели. См. Править. – jacktric

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