在回发后将焦点设置在文本框上

时间:2010-04-22 12:36:35

标签: asp.net textbox

我有一个包含3个TextBox的搜索页面,用户可以使用。

过滤搜索

我把重点放在包含文本的TextBox上。如果多个包含文本只关注最后一个TextBox。

private void SetFocusOnTextBox(ControlCollection ctrlCollection)
{
    foreach (Control ctrl in ctrlCollection)
    {
        if (ctrl.GetType() == typeof(TextBox))
        {
            if (((TextBox)ctrl).Text != string.Empty)
            {
                SetFocus(ctrl);
            }
        }
    }
}

代码运行并且用户搜索后,焦点将转到TextBox的开头,而不是假定它的结尾。如何将插入标记在TextBox的末尾?

2 个答案:

答案 0 :(得分:1)

我认为答案就在这里:Use JavaScript to place cursor at end of text in text input element

取自链接的解决方案:您必须将onfocus="this.value = this.value"添加到标记文件中的三个控件。这在ASP.NET中应该不是那么容易,但一种解决方案是在代码隐藏文件中添加属性。

protected void Page_Init(object sender, EventArgs e)
{
    // MoveCursorToEndOnFocus is called in Page_Init and not Page_Load to avoid
    // filling the ViewState with unnecessary data.
    // TODO: Call MoveCursorToEndOnFocus here.
}

private void MoveCursorToEndOnFocus(ControlCollection controlCollection)
{
    foreach (TextBox textBox in controlCollection
        .Where(control => control.GetType() == typeof(TextBox)))
    {
        textBox.Attributes.Add("onchange", "this.value = this.value");
    }
}

答案 1 :(得分:0)

不应该是

if (((TextBox)ctrl).Text == string.Empty)

前进到最底部的空文本框?如果是if (((TextBox)ctrl).Text != string.Empty),则会将焦点(最终)设置为最底部的非空文本框。

至于将光标前进到最后一个字符,请尝试:

function cursorToEnd( elem )
{
  elem.focus();
  elem.value+='x';
  elem.value=elem.value.replace(/x$/,"");   
}