我有一个包含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的末尾?
答案 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$/,"");
}