Tengo un cuadro de texto lightbox que se muestra utilizando una llamada AJAX desde un UpdatePanel de ASP.NET. Cuando se muestra el lightbox, utilizo el método focus()
de un cuadro de texto que está en el lightbox para enfocar el cuadro de texto de inmediato.Comprobación para ver si un elemento DOM tiene foco
Cuando está en Firefox, el cuadro de texto se enfoca sin problemas. En IE, el cuadro de texto no gana enfoque a menos que utilice
setTimeout(function(){txtBx.focus()}, 500);
para que el foco de incendio método un poco más tarde, después de que el elemento DOM se ha cargado Asumo.
El problema es que, inmediatamente por encima de esa línea, ya estoy verificando si el elemento es nulo/indefinido, por lo que el objeto ya debería existir si golpea esa línea, simplemente no se permitirá enfocar de inmediato por alguna razón.
Obviamente, configurar un temporizador para "corregir" este problema no es la mejor o más elegante manera de resolver esto. Me gustaría ser capaz de hacer algo como lo siguiente:
var txtBx = document.getElementById('txtBx');
if (txtPassword != null) {
txtPassword.focus();
while (txtPassword.focus === false) {
txtPassword.focus();
}
}
¿Hay alguna manera de saber que un cuadro de texto tiene el foco para que yo pudiera hacer algo así por encima?
¿O estoy mirando esto de la manera incorrecta?
Editar
Para aclarar, no estoy llamando el código al cargar la página. El script es en la parte superior de la página, sin embargo, está dentro de una función que se llama cuando se completa la devolución de datos asincrónica de ASP.NET, no cuando se carga la página.
Como esto se muestra después de una actualización de Ajax, el DOM ya debería estar cargado, así que supongo que el evento $(document).ready()
de jQuery no será útil aquí.
¿El método de trabajo si setTimeout() con un retraso de 0? – Aintaer
¿Podría ser que la secuencia de comandos se esté ejecutando antes de que se muestre lightbox + textbox? ¿Cómo estás abriendo la caja de luz? Tal vez publicar un código. –
Eso es ciertamente posible, no estoy seguro de qué hacer para evitarlo. –