【问题标题】:Maintain MULTISELECT ListBox scroll position in update panel during postback, kinda works在回发期间保持 MULTISELECT ListBox 滚动位置在更新面板中,有点工作
【发布时间】:2011-09-30 19:02:44
【问题描述】:

我正在使用以下代码来维护 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 中不会发生滚动开始时的回弹。

感谢您的帮助。

【问题讨论】:

  • 我尝试了几个与您类似的代码 sn-ps,但在我的情况下都没有。你和他们的唯一区别是 prm.add_beginRequest(BeginRequestHandler); prm.add_endRequest(EndRequestHandler);不是在最后。并且要重置的对象未声明为 var。诡异的!!感谢您发布此内容,它节省了我调试的时间。

标签: javascript asp.net listbox compatibility


【解决方案1】:

可能早就过期了,但仍然被浏览了 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' 属性选择的项目。然后在加载时设置滚动顶部。

【讨论】:

    猜你喜欢
    • 2014-07-13
    • 2011-09-28
    • 2011-07-31
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 2013-07-17
    • 2013-05-25
    相关资源
    最近更新 更多