我有一个灯箱文本框,它使用ASP.NET UpdatePanel的AJAX调用显示。当灯箱显示时,我使用位于灯箱中的文本框的focus()
方法立即将焦点放在文本框上。
在Firefox中,文本框没有问题地获得焦点。在IE中,除非我使用setTimeout()
函数,否则文本框不会获得焦点。
setTimeout(function(){txtBx.focus()}, 500);
为了稍后触发焦点方法,我假设DOM元素已经被加载。
问题是,在该行代码上方,我已经检查了该元素是否为null/undefined,因此如果它达到了该行代码,该对象应该已经存在,只是由于某种原因它无法立即获得焦点。
显然,设置定时器来“修复”这个问题并不是解决问题的最佳或最优雅的方法。我想能够执行以下操作:
var txtBx = document.getElementById('txtBx');
if (txtPassword != null) {
txtPassword.focus();
while (txtPassword.focus === false) {
txtPassword.focus();
}
}
有没有办法判断文本框是否正在聚焦,以便执行类似上面的操作?或者我是在错误地处理这个问题吗?
编辑 为了澄清,我不是在页面加载时调用代码。该脚本确实位于页面顶部,但它位于一个函数内部,该函数在ASP.NET的异步回发完成时调用,而不是在页面加载时调用。
由于这是Ajax更新后显示的,因此DOM应已加载,因此我假设jQuery的 $(document).ready() 事件在此处不会有帮助。