2013-08-29 105 views
0

后在Chrome和Safari TabPanel中保持滚动位置我试图在使用以下编码设置焦点以跨多个浏览器回发控件后保持滚动位置。在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> 

回答

0

问题通过使用postBackElement在javascript设置焦点,而不是使用ScriptManager将焦点设置在服务器端事件的解决。我发现下面的代码在Focus Scroll Issue

这是我更新的JavaScript代码。此外,

//-----------------------------------------------------------------------------------// 
// 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(); 
     } 
    } 
} 
0

您可以修改Page指令这样:

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

是的,我已经使用MaintainScrollPositionOnPostback但只适用于网页,而不是一个tabpanel内的滚动条从Page_PreRender事件删除sm.SetFocus(PostControl)。谢谢。 – TroyS