这是正在发生的事情:
1) 字段上的 TAB - 客户端事件
2) 关注下一个领域 - 客户事件
3) 回发 - 服务器事件
4) 页面重绘 - 客户端事件新页面覆盖先前的客户端事件
您的问题的解决方案是:
a) 在回发之前获取获得焦点的元素
<script>
var idSelected;
$("input").focusin(function () {
idSelected = this.id;
});
</script>
b) 在回发之前存储 ClientID(实际上是在 var idSelected)某处(即隐藏的文本框,vith ViewState = true)
** b) 回发后获取 ClientID **(从隐藏的 TextBox 中提取并放入 var idSelected)
d) 使用 ClientID 获取元素并设置焦点 AFTER postback
<script>
$(document).ready(function () {
if (idSelected != null) {
$("#" + idSelected).focus();
idSelected = null;
});
});
</script>
注意:此示例脚本使用 JQuery。
请记住将Jquery.js 放入您的解决方案并在您的页面中添加参考
<form id="form1" runat="server" enctype="multipart/form-data" method="post">
<asp:ScriptManager runat="server" >
<Scripts>
<asp:ScriptReference Path="~/Scripts/jquery.js" ScriptMode="Auto" />
....
注意 2:此解决方案无需 AJAX。
看看this answer:要让Javascript在Ajax上工作,你必须使用这样的代码:
<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
function EndRequestHandler(sender, args)
{
MyScript();
}
</script>