JQuery Accordion: изменение размера моего элемента управления заголовком

Я использую Аккордеон JQuery. В фаерфоксе все хорошо. Однако в 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 предназначен для отображения элемента управления заголовком (до дней MasterPages), а нижний раздел — это раздел, который я пытаюсь прокрутить. Раздел «content» — это тот, который мне нужен для прокрутки. Див «заголовок» исчезает при прокрутке. Может ли кто-нибудь спасти меня еще? :)

<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