我可以使用以下代码在回发后关注文本框:
ScriptManager.RegisterStartupScript(textBox, textBox.GetType(), "selectAndFocus", "$get('" + textBox.ClientID + "').focus();", true);
但是这会将光标位置设置为文本框的开头,而不是最后一个键入的字符。我尝试使用以下代码解决这个问题:
textBox.Attributes.Add("onfocus", "$get('" + textBox.ClientID + "').value = $get('" + textBox.ClientID + "').value;");
但这不起作用。与以前相同的结果。 我怎么解决这个问题?
我已经阅读了很多链接,this看起来像是最好的解决方案,但我无法让它发挥作用。
更新:忘记提及文本框位于更新面板内。
UPDATE2,尝试解决方案:
string setCaretTo = @"function setCaretTo(obj, pos) {
if(obj.createTextRange) {
/* Create a TextRange, set the internal pointer to
a specified position and show the cursor at this
position
*/
var range = obj.createTextRange();
range.move('character', pos);
range.select();
} else if(obj.selectionStart) {
/* Gecko is a little bit shorter on that. Simply
focus the element and set the selection to a
specified position
*/
obj.focus();
obj.setSelectionRange(pos, pos);
}
}";
ScriptManager.RegisterClientScriptBlock(//anotherunrelated script);
ScriptManager.RegisterClientScriptBlock(textBox, textBox.GetType(), "MyScript", setCaretTo, true);
ScriptManager.RegisterStartupScript(textBox, textBox.GetType(), "MyStartupScript", "window.onload = function() {obj = window.document.getElementById('"+textBox.ClientID+"');setCaretTo(obj, obj.getAttribute('value').length);}", true);`
答案 0 :(得分:1)
使用您提供的链接中的setCaretTo
功能,我添加了以下内容:
window.onload = function() {
obj = window.document.getElementById('myTextBox');
setCaretTo(obj, obj.getAttribute('value').length);
}
这会将其设置为最后一个字符。
答案 1 :(得分:0)
This为我解决了这个问题:
string setCursorToEndScript = @"function SetCursorToTextEnd(textControlID)
{
var text = document.getElementById(textControlID);
if (text != null && text.value.length > 0)
{
if (text.createTextRange)
{
var FieldRange = text.createTextRange();
FieldRange.moveStart('character', text.value.length);
FieldRange.collapse();
FieldRange.select();
}
}
}
";
string setFocusScript = @"$get('" + textBox.ClientID + "').focus();";
ScriptManager.RegisterClientScriptBlock(textBox, textBox.GetType(), "SetCursorToTextEnd", setCursorToEndScript, true);
ScriptManager.RegisterStartupScript(textBox, textBox.GetType(), "selectAndFocus", setFocusScript, true);
textBox.Attributes.Add("onfocus", "SetCursorToTextEnd('"+ textBox.ClientID +"');");