2013-02-18 139 views
0

我有一个带有实时搜索功能的文本框。除了一个问题,它工作得很好。如果我在其上键入任何字符,它就会失去焦点。如果我设置了textbox.Focus(),则光标将位于文本框的开头。如何在输入时在文本框的末尾设置焦点?

我已经尝试了互联网上的大多数解决方案。请在下面检查我的代码。

asp:TextBox ID="searchCompany" runat="server" Text="" CssClass="searchCompany" AutoPostBack="true" Width="190px" OnTextChanged="searchCompany_TextChanged"></asp:TextBox> 

在Page_Load中

protected void Page_Load(object sender, EventArgs e) 
     { 

      //ScriptManager1.RegisterAsyncPostBackControl(Menu1); 
      menuDisplay(); 
      searchCompany.Attributes.Add("onkeyup", "setTimeout('__doPostBack(\\'" + searchCompany.UniqueID + "\\',\\'\\')', 0);"); 

      //searchCompany.Attributes.Add("onfocus", "javascript:setSelectionRange('" + "','')"); 
      //searchCompany.Focus(); 


     } 

和我曾尝试的JavaScript如下

<script type="text/javascript"> 

    function setSelectionRange() { 
     var inputField = document.getElementById('searchCompany'); 
     if (inputField != null && inputField.value.length > 0) { 
      if (inputField.createTextRange) { 
       var FieldRange = inputField.createTextRange(); 
       FieldRange.moveStart('character',inputField.value.length); 
       FieldRange.collapse(); 
       FieldRange.select(); 
      } 
     } 
    } 

</script> 

我试图把代码上的方法“searchCompany_TextChanged”如果用户键入任何字符被调用每次都在一个文本框中,但是它不能正常工作。

我看到其他解决方案使用Textbox.Select()但System.Windows.Control不工作在asp.net我猜。

任何想法??

+0

不要在keyup上回发。你需要使用AJAX。 – SLaks 2013-02-18 21:43:45

+0

嗨SLaks键盘是每当用户在文本框上键入内容时更新我的​​搜索字段的键盘。这不是一个好方法吗? – warang 2013-02-18 22:32:02

+0

阅读本文[jQuery在文本区域设置光标位置](http://stackoverflow.com/questions/499126/jquery-set-cursor-position-in-text-area)。有一些很好的例子:-) – jwillmer 2013-02-18 22:49:34

回答

2

有一个非常简单的技巧,为我工作。基本上,将输入的文本值设置为自己的文本值,并将光标移动到文本的末尾。然后只关注它。这段代码使用jQuery来证明这一点,但你应该可以在直接的JS中做到这一点。

HTML

<input type="text" id="focusText"></input> 
<button id="focusButton">Set Focus</button> 

的JavaScript

$("#focusButton").click(function() { 
    var text = $("#focusText").val(); 
    $("#focusText").val(text).focus(); 
}) 

这里是JavaScript的一个非jQuery的例子,HTML应该是相同的:

document.getElementById("focusButton").onclick = function() { 
    var inputElement = document.getElementById("focusText"); 
    var text = inputElement.value; 
    inputElement.value = text; 
    inputElement.focus(); 
} 

这里有一个小提琴demonstra使用非jQuery版本的代码:http://jsfiddle.net/C3gCa/

+0

嗨Imortenson感谢您的快速评论。我试图将我的文本框更改为输入类型,但我不确定它的所有工作是否与我的文本框一样兴奋。如果我将其更改为输入类型,那么当用户在文本框中键入内容时,如何每次触发事件?有没有办法继续使用我的文本框,而不是输入类型?谢谢 – warang 2013-02-18 22:30:22

+0

是的,在幕后ASP.Net生成一个输入框。只需调整JavaScript以使用您分配给您的文本框的ID,而不用担心HTML部分。所以,在你的情况下,你会引用“searchCompany”而不是“focusText”。 – lmortenson 2013-02-18 22:34:00

+0

嗨Imortenson我仍然没有得到它。那么你想让我使用你在这里写的第二个代码吗?我已经尝试过,但似乎仍然没有工作。我已经添加了您的JavaScript并更改了文本框的名称,并尝试使用textbox.attribute.add()从C#中触发。请帮助..T – warang 2013-02-18 23:03:07

相关问题