【问题标题】:Set focus back to the proper textbox after autopostback function在自动回发功能后将焦点设置回正确的文本框
【发布时间】:2015-08-26 20:01:17
【问题描述】:

现在,这可能看起来是重复的,但事实并非如此。
互联网上的每个解决方案都向您展示了如何将注意力集中在触发事件的文本框上。

但是如果用户按下 Tab 怎么办?应该有焦点的文本框是下一个。
因此,我们采取了一种解决方法,并专注于 TabIndex 高于触发事件的文本框。

但是如果用户按下 Shift+tab 会怎样?
更糟糕的是:如果用户点击另一个随机文本框怎么办?

这就是问题所在。
我认为这里不需要代码,因为这是将焦点设置在具有自动回发功能的文本框上的通用解决方案。
如果需要代码,请在 cmets 中询问。

【问题讨论】:

    标签: c# asp.net textbox autopostback


    【解决方案1】:

    尝试,在服务器端使用 SetFocus 方法

    Page.SetFocus(IdOfControl);
    

    【讨论】:

    • 我将如何获得用户想要关注的控件的 ID?这里的问题是用户可以点击整个文档的任何文本框,并且回发需要保持焦点。
    【解决方案2】:

    我遇到了类似的问题,我使用隐藏字段修复了它,我在其中存储了用户选择的最后一个组件(单击或选项卡),并且在回发之后,它会将焦点设置回该组件。

    在您的页面中创建隐藏字段:

    <asp:HiddenField runat="server" ID="hiddenCurrentFocus" ClientIDMode="static"></asp:HiddenField>
    

    在您希望重新设置焦点的所有组件中设置 OnFocusIn。示例:

    <asp:TextBox runat="server" ID="txtConfirmTransitId" OnFocusIn="setFocus(this.name)" ></asp:TextBox>
    

    创建一个 JS 函数来将组件的名称存储在该隐藏字段中(我在这里使用 jQuery,但您也可以使用普通 JS 来完成):

    <script type="text/javascript">
        function setFocus(x) {
            $("#hiddenCurrentFocus").val(x);
        }
    </script>
    

    现在终于在后端,你将在回发之后设置焦点

    protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack)
            {
                //Set focus to the proper control
                var currentFocus = hiddenCurrentFocus.Value.ToString();
                if(!String.IsNullOrEmpty(currentFocus))
                {
                    Page.SetFocus(Page.FindControl(currentFocus));
                }
                
            }
        }
    

    这与 Jason 在下面的帖子中建议的解决方案类似,但我更喜欢将其存储在隐藏字段中:

    Set focus back to the proper textbox after autopostback function (Page.SetFocus doesn't solve the issue)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      • 1970-01-01
      • 2012-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多