嘿 在我开始写我的问题之前,我会原谅我的英语不好,我希望你能理解我。
我在ASP.NET Web应用程序中有一个AJAX Updatepanel。在这个Updatepanel是一个 动态搜索结果的文本框。当我开始在文本框中书写时,结果就像Google建议的那样。
现在,焦点必须始终放在文本框(输入字段)上,现在是用户点击的地方。
目前,当用户开始输入时,ASP.NET updatepanel会在几秒钟后刷新。
感谢您的帮助: - )
答案 0 :(得分:3)
当updatepanel完成更新的html dom
时会发生一个事件Sys.WebForms.PageRequestManager.getInstance().add_endRequest
试试这个
function EndRequestHandler() {
//get focus on the textbox
myTextbox.focus(); }
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
答案 1 :(得分:1)
这很有趣,但这是一个可能的解决方案。这个想法是:如果用户离开文本框(onblur),然后将他带回文本框(focusOnTxt函数):
<head runat="server">
<title></title>
<script type="text/javascript">
function focusOnTxt(sender) {
sender.focus();
sender.value = sender.value;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="upnl" runat="server">
<ContentTemplate>
<asp:TextBox ID="txt" runat="server"
onblur="focusOnTxt(this)"></asp:TextBox>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
在Page_Load:
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
txt.Focus();
}
}
答案 2 :(得分:0)
一个简单的SetFocus f.e.在Page.Load应该工作:
ScriptManager1.SetFocus(TextBox1.ClientID)
更新:根据this post以下作品......
将此脚本添加到页面头部的脚本块中:
function SetEnd(TB){
if (TB.createTextRange){
var FieldRange = TB.createTextRange();
FieldRange.moveStart('character', TB.value.length);
FieldRange.collapse();
FieldRange.select();
}
}
然后将onfocus事件添加到文本框中:
onfocus="SetEnd(this)"
在您的codebehind的Page.Load或TextChanged-Event处理程序中添加标准的SetFocus调用:
ScriptManager sm = ScriptManager.GetCurrent(this);
sm.SetFocus(myTextBox)