设置焦点控制后,如何在TabPanel中保持Chrome和Safari中的滚动位置

时间:2013-08-29 15:31:26

标签: javascript asp.net web-applications

我尝试使用以下编码将焦点设置为跨多个浏览器的回发控制后保持滚动位置。在IE浏览器中工作正常,但当我尝试重置焦点导致回发的控件时,滚动跳转到Chrome,Firefox和Safari的顶部。我使用scriptmanager.setfocus(control)方法设置焦点。 注意:我指的是选项卡面板中的垂直滚动条,而不是主页面滚动条。

 Private Sub Page_PreRender(sender As Object, e As System.EventArgs) Handles Me.PreRender
     Dim PostControl As Control = FindControlById(HiddenFieldPostControl.Value)
        If PostControl IsNot Nothing Then
            Dim sm As ScriptManager = ScriptManager.GetCurrent(Master.Page)
            sm.SetFocus(PostControl)
        End If
    End If
 End Sub

//-----------------------------------------------------------------------------------//
// Maintain scroll position in given element or control
//-----------------------------------------------------------------------------------//
var yPos
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_beginRequest(BeginRequestHandler);
prm.add_endRequest(EndRequestHandler);

function BeginRequestHandler(sender, args) {
    var tb = document.getElementById('MainContent_RightTabContainer_InputTabPanel');
    if (tb != null) {
        yPos= $get('InputPanel.ClientID').scrollTop;
    }
}
function EndRequestHandler(sender, args) {
    var tb = document.getElementById('MainContent_RightTabContainer_InputTabPanel');
    if (tb != null) {
        $get('InputPanel.ClientID').scrollTop = yPos;
    }
}

<asp:Panel ID="InputPanel" runat="server" CssClasss="MenuPanel" EnableViewState="False">
    ...controls
</asp:Panel>

2 个答案:

答案 0 :(得分:0)

您可以修改Page指令:

<%@ Page Title="" Language="C#"  MaintainScrollPositionOnPostback="true" Inherits="SomeObject" %>

答案 1 :(得分:0)

通过使用postBackElement在javascript中设置焦点而不使用scriptmanager将焦点设置在服务器端事件上来解决问题。我在Focus Scroll Issue

找到了以下代码

这是我更新的JavaScript代码。另外,从Page_PreRender事件中删除sm.SetFocus(PostControl)

//-----------------------------------------------------------------------------------//
// Maintain scroll position in given element or control
//-----------------------------------------------------------------------------------//
var yPos
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_beginRequest(BeginRequestHandler);
prm.add_endRequest(EndRequestHandler);

function BeginRequestHandler(sender, args) {
    var tb = document.getElementById('MainContent_RightTabContainer_InputTabPanel');
    if (tb != null) {
        postBackElement = args.get_postBackElement();
        yPos= $get('InputPanel.ClientID').scrollTop;
    }
}
function EndRequestHandler(sender, args) {
    var tb = document.getElementById('MainContent_RightTabContainer_InputTabPanel');
    if (tb != null) {
        $get('InputPanel.ClientID').scrollTop = yPos;
        if (postBackElement != null) {
            document.getElementById(postBackElement.id).focus();
        }
    }
}