现在,这可能看起来重复,但事实并非如此 互联网上的每个解决方案都向您展示如何关注触发事件的文本框。
但是如果用户按下标签怎么办?应该具有焦点的文本框是下一个 因此,我们进行了一种解决方法,并专注于TabIndex高于触发事件的文本框。
但是如果用户按下Shift +标签会怎么样? 更糟糕的是:如果用户点击另一个随机文本框怎么办?
这就是问题
我不认为这里需要代码,因为这是一个通用的解决方案,可以专注于具有自动回复功能的文本框。
如果需要代码,请在评论中提问。
答案 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));
}
}
}
这与杰森在下面的帖子中建议的解决方案类似,但是我更喜欢将其存储在隐藏字段中: