我有一个使用来自ASP.NET UpdatePanel的AJAX调用显示的lightbox文本框。在显示灯箱时,我使用灯箱中的文本框的focus()
方法将焦点集中到文本框上。检查DOM元素是否有焦点
在Firefox中,文本框获得焦点没有问题。在IE浏览器,除非我用
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()
事件在这里没有帮助。
如果setTimeout()的延迟为0,该方法是否工作? – Aintaer 2012-08-08 20:44:42
难道是在呈现lightbox +文本框之前执行脚本?你如何打开灯箱?也许发布一些代码。 – 2008-10-06 15:31:40
这当然是可能的,我只是不知道该怎么做才能解决这个问题。 – 2008-10-06 16:16:28