JQuery Accordion: Преоразмеряване на моя контрол на заглавката

Използвам JQuery Accordion. Всичко е наред във FireFox. В IE7 обаче, когато щракна върху връзка в моя документ, която разширява едно от заглавията на акордеонното меню, моят сървърен контрол на заглавката се преоразмерява (свива). Как да спра преоразмеряването на екрана? Това е въпросната част от JavaScript:

if (!$('h3.ReferenceBackgroundHeader', '#References').hasClass('ui-state-active')) {

                $("#References").accordion('activate', 0);

            }

            window.scrollTo(0, $('#References').offset().top);
            return false;

Това, което искам, е .accordion('activate',indexval); да не променя форматирането на заглавката ми.


Странно. Трябва да има решение за това в IE. Ако изпразня функцията си и просто стартирам:

window.scroll(0,900);

Все още губя контрола на сървъра си отгоре?! Някой да има предложение?


Може би това е проблемът... Страницата всъщност се състои от два div. Горният div е за показване на контролата на заглавката (преди дните на MasterPages), а долната секция е секцията, в която се опитвам да превъртя. Div "съдържание" е този, който изисквам възможност за превъртане. Div "header" е този, който изчезва, когато превъртам. Може ли някой да ме спаси? :)

<body>
<form id="Form1" method="post" runat="server">
    <div id="header">
        <uc1:Header ID="headerControl" runat="server"></uc1:Header>
    </div>
    <div id="content" style="overflow:auto">
        <asp:PlaceHolder ID="contentPlaceholder" runat="server"></asp:PlaceHolder>
    </div>
</form>


person Nick    schedule 06.07.2009    source източник


Отговори (2)


Имате ли лента за превъртане в браузъра си преди и след като разширите менюто?

Това, което може да се случи, е, че преди да разширите менюто, всичко се побира на екрана, така че браузърът не ви дава лента за превъртане; но когато разширите менюто, то се нуждае от повече място, така че браузърът добавя лента за превъртане, което кара уеб страницата да „мащабира“ надолу.

Не съм сигурен как да поправя този проблем, без да задам голям min-height във вашия css файл, така че лентата за превъртане винаги да се показва.

Надявам се това да помогне.

АКТУАЛИЗАЦИЯ: Току-що намерих уебсайт, който говори за това как да коригирате проблема с лентата за превъртане. Просто исках да позволя на всеки друг, който попадне на това, много по-чиста корекция.

person thebrokencube    schedule 06.07.2009
comment
Мисля, че сте прав.. Ще експериментирам с това още малко, но това звучи много вероятно. - person Nick; 06.07.2009

Така че разбрах. Работя върху наследен код, който наследих. Лаех на грешното дърво. Намерих следния код в заглавката на страницата, който ме натъжи:

function resizeContentWindowScrollBar() {
         var contentDiv = document.getElementById("content");
         var header = document.getElementById("header");

         if (header != null) {
             var desiredHeight = document.body.clientHeight - header.clientHeight;

             if (desiredHeight > 0) {
                 contentDiv.style.height = (document.body.clientHeight - header.clientHeight) + "px";

             }
         }


     }

Забележете извикванията на header.clientHeight? Този фрагмент очевидно просто получава височината на заглавката и с това приравнява височината на div на съдържанието. Проблемът беше (и само в IE имайте предвид), че функцията clientHeight винаги връщаше "0". Замених ги с header.offsetHeight и всичко е наред.

Така че изглежда, че в IE моите функции clientHeight не работят правилно.

person Nick    schedule 08.07.2009
comment
Браво, радвам се, че разбра проблема. Трябва да изберете този отговор като правилен, за да знаят хората, че е решен. - person thebrokencube; 09.07.2009