6

ASP.NET プロジェクトのページで複数の TabContainer を使用していますが、非常に奇妙な動作に気付きました。ページが読み込まれると、ページの最後の TabContainer にフォーカスが移動し、下にスクロールします。私は明示的にどのコントロールにも焦点を合わせていないので、これがどこから来ているのかわかりません。また、コントロール間で場所を切り替えましたが、フォーカスされているのは常に最後のコントロールです。TabContainers には特別な設定はありません。基本的には次のようになります。

<cc1:TabContainer ID="tabContainer" runat="server">
    <cc1:TabPanel runat="server" HeaderText="Header1" ID="tabPanel1" TabIndex="0">
        <HeaderTemplate>
            <asp:Label ID="lblTab1" runat="server" Text="Tab1"></asp:Label>
        </HeaderTemplate>
        <ContentTemplate>
            ... (anything goes here, it still doesn't work)
        </ContentTemplate>
    </cc1:TabPanel>
    <cc1:TabPanel runat="server" HeaderText="Header2" ID="tabPanel2" TabIndex="1">
        <HeaderTemplate>
            <asp:Label ID="lblTab2" EnableViewState="False" runat="server" Text="Tab2"></asp:Label>
        </HeaderTemplate>
        <ContentTemplate>
            ... (anything goes here, it still doesn't work)
        </ContentTemplate>
    </cc1:TabPanel>
</cc1:TabContainer>

コントロールにフォーカスを設定できることはわかっています。試してみましたが、ページは最初にタブ コンテナーまでスクロールしてから、フォーカスされたコントロールに戻ります (見栄えがよくありません)。これを試して、フォーカスを別のコントロールに設定しました:

<body id="main" onload="javascript:document.getElementById('lnkLogout').focus();">

これは TabContainer の標準的な動作ですか? どうすればそれを取り除くことができますか?

4

5 に答える 5

7

ScriptManagerコントロールの直後に以下のスクリプトを配置します。

<script type="text/javascript">
    Sys.Extended.UI.TabContainer.prototype._app_onload = function (sender, e) {
        if (this._cachedActiveTabIndex != -1) {
            this.set_activeTabIndex(this._cachedActiveTabIndex);
            this._cachedActiveTabIndex = -1;

            var activeTab = this.get_tabs()[this._activeTabIndex];
            if (activeTab) {
                activeTab._wasLoaded = true;
                //activeTab._setFocus(activeTab); -- disable focus on active tab in the last TabContainer
            }
        }
        this._loaded = true;
    }
</script>
于 2012-05-29T20:11:31.583 に答える
0

ページがジャンプしないように、サーバー側でフォーカスを設定できます。

Page_Loadでこれを試してください:

PageUtility.SetFocus(foo);

また、Page.MaintainScrollPositionOnPostbackを設定しているかどうかも確認してください。

それが役に立ったら教えてください。

更新-デフォルトでフォーカスしたいコントロールに対して.Focus()を呼び出すだけです。

例:YourControlToFocus.Focus()

于 2012-05-29T10:03:54.923 に答える
0

これは古いスレッドですが、解決されたことはありません - ここまたは私が見つけた他のスレッドのいずれかで - 私は同じ問題を抱えていました.

javascriptをbody要素に入れることで修正しました:onload="scrollTo(0,0);"

于 2013-08-16T16:04:24.450 に答える
0

これを試してみてください。それは私を助けました:

window.Sys.Application.findComponent('<%=tabContainer.ClientID %>');

tabContainer.set_activeTabIndex(1);  ( //Here set the id of the last tab that is the index of the last tab. Index will start with 0 upto last - 1 as in array.. )
于 2013-07-10T10:09:09.427 に答える