我的页面设置如下:
<ajax:UpdatePanel id="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:TextBox id="TextBox1" runat="server" AutoPostBack="true"/>
<asp:TextBox id="TextBox2" runat="server" AutoPostBack="true"/>
</ContentTemplate>
</ajax:UpdatePanel>
<asp:TextBox id="TextBox3" runat="server"/>
每当TextBox1或TextBox2中发生更改时,都会发生异步回发。这当然是通过在更改文本后将焦点移动到不同的控件来启动的。问题是当异步回发完成控制时,获得焦点的人失去了焦点。无论是在更新面板内还是外面都无关紧要。
我尝试将javascript添加到母版页:
<script type="text/javascript">
var lastFocused = null;
$(document).ready(function() {
$('input').focus(function() {
lastFocused = this;
});
$('.dropdown').focus(function() {
lastFocused = this;
});
});
function RestoreFocus(source, args) {
if (lastFocused != null)
lastFocused.focus();
}
function AddRequestHandler() {
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_pageLoaded(RestoreFocus);
}
</script>
与
一起<body onload="AddRequestHandler">
我知道lastFocused正在获取一个值并且RestoreFocus正在运行,但无论何时运行,lastFocused的值都为null。
是否有人修复了我的javascript或解决问题的方法?
答案 0 :(得分:1)
这里有一些问题,很容易解决!由于这些元素被替换,.focus()
处理程序将不会粘住,您需要.live()
,如下所示:
var lastFocused = null;
$(function() {
$('input, .dropdown').live('focus', function() {
lastFocused = this;
});
});
注意:您需要jQuery 1.4.1+来支持 focus
事件 .live()
此外,您应该使用add_endRequest
一次,如下所示:
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(RestoreFocus);
当aync-postback完成时, endRequest
会触发,而不是在初始页面加载时仅 。