1

私は簡潔にしようとします:

  1. Autopostbackに設定されたドロップダウンリストがありますtrue
  2. を含む UpdatePanel がありますLabel
  3. ダウンダウン リストの選択が変更されたときに、ラベルを更新したい。

問題: ドロップダウンリストでフォーカスが失われ、ユーザーがドロップダウンリストをクリックしてフォーカスをコントロールに戻す必要があります。

私の「解決策」:DropDownList_SelectionChangedイベントでは、フォーカスをドロップダウン リストに戻します。

dropdownlist1.focus()

これは IE ではうまく機能しますが、Firefox と Chrome では、フォーカスが割り当てられたコントロールがブラウザー ウィンドウの表示部分の下部に配置されるように、スクロール位置が変更されます。これは多くの場合、非常に方向感覚を失わせる副作用です。

IE と同じように FF でも機能するように、これを回避するにはどうすればよいですか?

4

5 に答える 5

3

これらの3つの方法のいずれかでMaintainScrollPositionOnPostbackを試してください

  • プログラムで-Page.MaintainScrollPositionOnPostBack=true;
  • ページ宣言-<%@ページMaintainScrollPositionOnPostback = "true"%>
  • web.config内-<pagesmaintainScrollPositionOnPostBack= "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

ヴェリカ - 遅れてすみません。マスター ページを使用している場合は、次を追加します。

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

それ以外の場合は追加するだけです

<asp:ScriptManager runat="server" id="sm" />
于 2010-12-23T18:28:22.023 に答える
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 に答える
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);
        }

これが私がこの問題を回避してきた方法です。この例では jquery が必要ですが、必要に応じて書き直すことができます。基本的には、フォーカス スクリプトを遅らせるだけです。

于 2013-04-30T19:29:32.933 に答える