【发布时间】:2018-04-25 18:21:49
【问题描述】:
我有一个灯箱文本框,它使用来自 ASP.NET UpdatePanel 的 AJAX 调用显示。当灯箱显示时,我使用灯箱中文本框的focus() 方法立即将焦点带到文本框。
在 Firefox 中,文本框毫无问题地获得焦点。在 IE 中,除非我使用
,否则文本框不会获得焦点setTimeout(function(){txtBx.focus()}, 500);
我假设在加载 DOM 元素之后稍微稍后触发 focus 方法。
问题是,就在那条线的上方,我已经在检查元素是否为空/未定义,所以如果对象到达那条线,它应该已经存在,它只是不允许自己获得焦点由于某种原因离开。
显然,设置一个计时器来“修复”这个问题并不是解决这个问题的最佳或最优雅的方法。我希望能够执行以下操作:
var txtBx = document.getElementById('txtBx');
if (txtPassword != null) {
txtPassword.focus();
while (txtPassword.focus === false) {
txtPassword.focus();
}
}
有什么方法可以告诉我一个文本框有焦点,所以我可以做上面的事情吗?
还是我看错了?
编辑
为了澄清,我没有在页面加载时调用代码。脚本位于页面顶部,但它位于一个函数内,该函数在 ASP.NET 的异步回发完成时调用,而不是在页面加载时调用。
因为这是在 Ajax 更新之后显示的,所以应该已经加载了 DOM,所以我假设 jQuery 的 $(document).ready() 事件在这里没有帮助。
【问题讨论】:
-
可能是在灯箱+文本框渲染之前脚本正在执行?你是怎么打开灯箱的?也许发布一些代码。
-
这当然有可能,我只是不知道该怎么做才能解决这个问题。
-
setTimeout() 延迟为 0 是否有效?
标签: javascript internet-explorer