这是正在发生的事情:
1)在字段上按TAB键-客户端事件
2)聚焦到下一个字段-客户端事件
3)Postback-服务器事件
4)页面重绘-客户端事件新页面覆盖之前的客户端事件
解决您的问题的方法是:
a)在postback之前获取已获得焦点的元素
<script>
var idSelected;
$("input").focusin(function () {
idSelected = this.id;
});
</script>
b) 存储ClientID(实际上在var idSelected
中)在postback之前将其存储在某个地方(即一个带有ViewState = true的隐藏文本框中)
** b) 获取ClientID **(从隐藏的TextBox中提取并将其放入var idSelected
中)在postback之后
d) 获取具有ClientID的元素并设置焦点在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即可工作。
请查看此答案:要使Javascript在Ajax上工作,您必须使用类似以下的代码:
<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
function EndRequestHandler(sender, args)
{
MyScript();
}
</script>