gpt4 book ai didi

asp.net - 如何在异步回发中保持控制焦点?

转载 作者:行者123 更新时间:2023-12-01 05:09:00 26 4
gpt4 key购买 nike

我的页面设置如下:

<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 或解决一般问题吗?

最佳答案

这里有几个问题,很容易解决!由于这些元素被替换,.focus()处理程序不会粘住,您需要 .live() ,像这样:

var lastFocused = null;
$(function() {
$('input, .dropdown').live('focus', function() {
lastFocused = this;
});
});

注意:您需要 jQuery 1.4.1+ 来支持 焦点 事件 .live()

您还应该使用add_endRequest一次,像这样:

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(RestoreFocus);

endRequest当 aync-postback 完成时触发,而不是在初始页面加载时触发。

关于asp.net - 如何在异步回发中保持控制焦点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3398080/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com