2013-02-18 140 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

相關問題