J'ai une zone de texte lightbox affichée à l'aide d'un appel AJAX provenant d'un UpdatePanel ASP.NET. Lorsque la lightbox est affichée, j'utilise la méthode focus()
d'une zone de texte qui se trouve dans la lightbox pour mettre immédiatement la zone de texte au point.Vérification de la mise au point d'un élément DOM
Dans Firefox, la zone de texte est mise au point sans problème. Dans IE, la zone de texte ne gagne pas le focus à moins d'utiliser
setTimeout(function(){txtBx.focus()}, 500);
pour faire un peu plus tard le feu la méthode de mise au point, après l'élément DOM a été chargé je suppose. Le problème est, immédiatement au-dessus de cette ligne, je vérifie déjà si l'élément est null/indéfini, donc l'objet devrait déjà exister s'il touche cette ligne, il ne se permettra pas de gagner le focus tout de suite pour une raison quelconque. Il est évident que le fait de régler un temporisateur pour "résoudre" ce problème n'est pas la meilleure ou la manière la plus élégante pour résoudre ce problème. Je voudrais être en mesure de faire quelque chose comme ce qui suit:
var txtBx = document.getElementById('txtBx');
if (txtPassword != null) {
txtPassword.focus();
while (txtPassword.focus === false) {
txtPassword.focus();
}
}
Est-il possible de dire qu'une zone de texte a le focus pour que je puisse faire quelque chose comme ci-dessus? Ou est-ce que je regarde ça dans le mauvais sens?
Modifier
Pour clarifier les choses, je ne suis pas d'appeler le code de la charge de page. Le script est en haut de la page, mais il se trouve à l'intérieur d'une fonction appelée lorsque la publication asynchrone d'ASP.NET est terminée, et non lors du chargement de la page. Comme il est affiché après une mise à jour Ajax, le DOM doit déjà être chargé, donc je suppose que l'événement $(document).ready()
de jQuery ne sera pas utile ici.
La méthode fonctionne-t-elle si vous définissezTimeout() avec un délai de 0? – Aintaer
Se pourrait-il que le script soit en cours d'exécution avant le rendu de la lightbox + textbox? Comment ouvrez-vous la visionneuse? Peut-être poster un code. –
C'est certainement possible, je ne suis pas sûr de savoir quoi faire pour contourner cela. –