回发后维护文本框光标

时间:2011-12-15 04:46:40

标签: asp.net textbox cursor postback keyup

我想在输入字符时更改与文本框相同的标签值。所以这里有一个问题?如何在回发后维护文本框光标?例如我输入'ab'。文本框光标位置将保留在最后一个字符“b”

这是我的编码

<script language="javascript" type="text/javascript">


 function RefreshUpdatePanel() {
     __doPostBack('<%= TextBox1.ClientID %>', '');
 };


</script>
<asp:UpdatePanel ID="UpdatePanel3" runat="server" UpdateMode="Conditional">
<ContentTemplate>

    <br />
    <br />
<asp:TextBox ID="TextBox1" runat="server" onkeyup="RefreshUpdatePanel();" 
            ontextchanged="TextBox1_TextChanged"></asp:TextBox>

     <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
         <ContentTemplate>
             <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
         </ContentTemplate>
    <Triggers>
    <asp:AsyncPostBackTrigger ControlID="TextBox1" />
    </Triggers>
    </asp:UpdatePanel>

    </ContentTemplate>
</asp:UpdatePanel>

我的后端代码

 protected void Page_Load(object sender, EventArgs e)
    {
        //--If post back is txtSearach , then do search function--
        if (Page.Request.Form["__EVENTTARGET"] == TextBox1.ClientID)
        {
            this.Label1.Text = this.TextBox1.Text;

        }

    }

我也尝试在回发事件时放置textbox1.focus(),但文本框光标位置将从第一个字符开始:(

2 个答案:

答案 0 :(得分:0)

我强烈建议您查看一些可用的jquery插件。快速谷歌搜索 jquery autocomplete 将返回相当多的选项。这是一个让你入门的。

http://jqueryui.com/demos/autocomplete/

答案 1 :(得分:0)

您需要做的是处理表单(或文档)的onsubmit事件,然后将当前插入位置存储在隐藏字段中。在服务器上,读取隐藏字段值,然后生成启动脚本以设置插入符号位置。棘手的位置正在设置插入位置 - 下面的链接将帮助你解决这个问题:

http://parentnode.org/javascript/working-with-the-cursor-position/
jQuery Set Cursor Position in Text Area
Set keyboard caret position in html textbox

说了这些,我建议你重新构建你的解决方案。您应该使用脚本服务(或页面方法)对服务器进行ajax调用以获取搜索结果,而不是将更新面板部分回发文本更改。它会更简单,优雅和高效。以下链接可以帮助您入门:

http://encosia.com/using-jquery-to-consume-aspnet-json-web-services/
http://www.codeproject.com/KB/aspnet/jQuery_To_WCF.aspx
http://msdn.microsoft.com/en-us/magazine/cc163499.aspx