1

我会尽量简洁:

  1. 我有一个Autopostback设置为的下拉列表true
  2. 我有一个包含Label.
  3. 当向下列表选择更改时,我想更新标签。

问题:下拉列表上的焦点丢失,迫使用户单击下拉列表以将焦点重置回控件。

我的“解决方案”:在DropDownList_SelectionChanged事件中,将焦点设置回下拉列表:

dropdownlist1.focus()

虽然这在 IE 中效果很好,但 Firefox 和 Chrome 会更改滚动位置,以便分配焦点的控件位于浏览器窗口可见部分的底部。这通常是一个非常令人迷惑的副作用。

如何避免这种情况,使其在 FF 中像在 IE 中一样工作?

4

5 回答 5

3

通过以下 3 种方式之一尝试MaintainScrollPositionOnPostback

  • 以编程方式 - Page.MaintainScrollPositionOnPostBack = true;
  • 页面声明 - <%@ Page MaintainScrollPositionOnPostback="true" %>
  • 在 web.config - <pages maintainScrollPositionOnPostBack="true" />

您可能还需要在 scriptmanager 声明之后添加此 javascript:

<script type="text/javascript">

var prm = Sys.WebForms.PageRequestManager.getInstance();

prm.add_beginRequest(beginRequest);

function beginRequest()
{
    prm._scrollPosition = null;
}

</script> 
于 2010-03-30T19:07:51.110 回答
1

Velika - 抱歉耽搁了。如果您使用的是母版页,请添加:

<asp:ScriptManagerProxy runat="server" ID="smp"></asp:ScriptManagerProxy>

否则只需添加

<asp:ScriptManager runat="server" id="sm" />
于 2010-12-23T18:28:22.023 回答
0
public static void SetFocusByJavaScript(Page page, string clientID)
        {
            string uniqueScriptId = String.Concat("focusScript", clientID);
            string scriptBody = String.Format("setTimeout(\"$get('{0}').focus();\", 100);", clientID);
            ScriptManager.RegisterStartupScript(page, page.GetType(), uniqueScriptId, scriptBody, true);
        }

This is how I have been getting around this issue. The example requires jquery, but you could rewrite if needed. Basically just delays the focus script.

于 2013-04-30T19:29:32.933 回答
0

试试这个

<script type="text/javascript">
    var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm.add_beginRequest(beginRequest);

    function beginRequest() {
        prm._scrollPosition = window.top;
    }
</script> 
于 2010-07-01T10:16:25.670 回答
0

有完全相同的问题并得到了答案。希望这会有所帮助: http ://forums.asp.net/p/1622050/4164858.aspx#4164858

 <script type="text/javascript">  
 var xPos, yPos;  
 var postBackElement;  

 var prm = Sys.WebForms.PageRequestManager.getInstance();  
 prm.add_endRequest(EndRequestHandler);  
 prm.add_initializeRequest(InitializeRequest);  

 function EndRequestHandler(sender, args) {  
     if (postBackElement != null) {  
         document.getElementById(postBackElement.id).focus();  
     }  
 }  
 function InitializeRequest(sender, args) {    
      postBackElement = args.get_postBackElement();    
  }            

于 2010-11-11T16:45:28.813 回答