在autopostback功能后将焦点设置回正确的文本框

时间:2015-08-26 20:01:17

标签: c# asp.net textbox autopostback

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

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

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

这就是问题 我不认为这里需要代码,因为这是一个通用的解决方案,可以专注于具有自动回复功能的文本框。
如果需要代码,请在评论中提问。

2 个答案:

答案 0 :(得分:0)

尝试使用服务器端的SetFocus方法

Page.SetFocus(IdOfControl);

答案 1 :(得分:0)

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

在页面中创建隐藏字段:

<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));
            }
            
        }
    }

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

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