设置始终专注于文本框(ASP.NET,Updatepanel)

时间:2010-10-04 12:06:43

标签: javascript asp.net updatepanel

嘿 在我开始写我的问题之前,我会原谅我的英语不好,我希望你能理解我。

我在ASP.NET Web应用程序中有一个AJAX Updatepanel。在这个Updatepanel是一个 动态搜索结果的文本框。当我开始在文本框中书写时,结果就像Google建议的那样。

现在,焦点必须始终放在文本框(输入字段)上,现在是用户点击的地方。

目前,当用户开始输入时,ASP.NET updatepanel会在几秒钟后刷新。

感谢您的帮助: - )

3 个答案:

答案 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)