我在IE8中UpdatePanel的文本框中选择文本时遇到问题。请考虑一个包含单个UpdatePanel的非常简单的页面。在该UpdatePanel中有两个Web控件:
-
具有三个静态定义的列表项的DropDownList,其AutoPostBack属性设置为True,并且
-
文本框Web控件
DropDownList有一个用于SelectedIndexChanged事件的服务器端事件处理程序,在该事件处理程序中有两行代码:
TextBox1.Text = "Whatever";
ScriptManager.RegisterStartupScript(this,
this.GetType(),
"Select-" + TextBox1.ClientID,
string.Format("document.getElementById('{0}').select();",
TextBox1.ClientID),
true);
其思想是,每当用户从DropDownList中选择和项目时,就会有一个部分页面回发,此时TextBox的Text属性被设置和选择(通过注入的JavaScript)。不幸的是,这不是工作的现状(我还尝试过将脚本放入pageLoad函数,但没有成功,如:
我的剧本
... }");
)所发生的情况是代码运行,但页面上的其他内容在部分页面回发结束时接收焦点,从而导致TextBox的文本被取消选择。
我可以通过使用JavaScript的setTimeout来延迟JavaScript代码的执行来“修复”这个问题。例如,如果我将发出的JavaScript更新为以下内容:
setTimeout("document.getElementById('{0}').select();", 111);
令人困惑的是.Focus()方法工作得很好。也就是说,如果我废弃JavaScript并用调用
TextBox1.Focus();
然后文本框接收焦点(尽管文本未被选中)。我已经检查了
微软webforms.js
注意,焦点是在注册的脚本运行之后设置的,但我很抱歉,我的JavaScript技能不足以解码这里发生的一切,以及为什么在选中文本和部分页面回发结束之间取消选中所选文本。我还尝试过使用Firebug的JavaScript调试器,看到当我的脚本运行时,TextBox的文本被选中。当我继续一步一步地浏览时,文本仍然处于选中状态,但是在退出脚本的最后一行之后(显然),它突然被取消选中。
有什么想法吗?我在拔头发。
提前谢谢。。。
编辑:
在进一步的测试中,我注意到这种行为只发生在IE8中