Поддерживать положение MULTISELECT ListBox прокрутки на панели обновления во время обратной передачи, вроде работает - PullRequest
3 голосов
/ 08 июля 2011

Я использую следующий код для поддержания позиции прокрутки ListBox на спинах постов.

<script type="text/javascript">
    // Helps maintain scroll position on the Specialty list box.
    var xPos, yPos;
    var prm = Sys.WebForms.PageRequestManager.getInstance();

    function BeginRequestHandler(sender, args)
    {
        var listBox = $get('<%= Special.ClientID %>');

        if (listBox != null)
        {
            xPos = listBox.scrollLeft;
            yPos = listBox.scrollTop;
        }
    }

    function EndRequestHandler(sender, args)
    {
        var listBox = $get('<%= Special.ClientID %>');

        if (listBox != null)
        {
            listBox.scrollLeft = xPos;
            listBox.scrollTop = yPos;
        }
    }

    prm.add_beginRequest(BeginRequestHandler);
    prm.add_endRequest(EndRequestHandler);
</script>

Это прекрасно работает в Firefox 5 или Chrome. Хотя в IE8 / IE9 каждый раз, когда я выбираю элемент в окне списка, он запускает запись назад, а список сохраняет позицию прокрутки. Подвох в том, что после публикации назад, если я прокручиваю все в окне или нажимаю стрелки, положение прокрутки возвращается к началу списка!

Отключение при запуске прокрутки не происходит в Firefox или Chrome.

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 15 декабря 2016

Возможно, давно пора, но тем не менее просмотрено 2071 раз:

  • s - это имя id = "mySelect" множественного выбора

  • fs - размер шрифта для выбора

    function SetScrollTop(s, fs)
    {
        if(document.getElementById(s) != null)
        {
            document.getElementById(s).scrollTop = (document.getElementById(s).selectedIndex * fs) + 1;
        }
    }
    

Вызовите эту функцию с телом onload = "SetScrollTop ('mySelect', 14)".

IE устанавливает верхнюю часть прокрутки на ноль для обратной записи, поэтому вам нужно каким-то образом отслеживать выбранный элемент (ы) (cookie или самодельный обработчик сеанса?), Чтобы вы могли использовать атрибут selected пункт (ы) выбран. Затем установите верхнюю часть прокрутки во время загрузки.

...