web-dev-qa-db-fra.com

En Javascript, la définition d'une zone de texte avec focus () ne fonctionne pas si elle est appelée en tant que fenêtre enfant

J'ai une page de test simple qui définit le focus sur une zone de texte sur une fonction oninit. Cependant, le code exact ne parvient pas à le faire si la page est appelée en tant qu'enfant.

Mettre la boîte d'alerte prouve que la fonction oninit est appelée mais ne parvient pas à mettre le focus dans la zone de texte. Cependant, appuyer sur Recharger se concentre correctement.

Donc, étant donné que mon code fonctionne parfaitement lorsqu'il est appelé sur une page principale, et fonctionne également chez un enfant si un rechargement est appelé, alors pourquoi ne fonctionne-t-il pas la première fois?

<html>
<body onload="init()">
<script type="text/javascript">
function init()
{
    document.getElementById("message").focus();
}

</script>
<textarea id="message" rows=10 cols=40></textarea>
</body>
</html>

Rien d'intelligent ici comme vous pouvez, ne fonctionne que si la page est chargée par window.open ("test2.html");

13
Ian Smith

quel navigateur utilisez-vous? Je vérifie Firefox, chrome & IE. Votre code fonctionne parfaitement et se concentre sur la zone de texte.

Je crée deux fichiers test1.html et test2.html dans un même répertoire. Dans test1.html, j'insère le code suivant.

<html>
<body>
<script type="text/javascript">
function init()
{
    window.open('test2.html');
}

</script>
<button onclick="init()">test</button>
</body>
</html>

Et dans test2.html ..

<html>
<body onload="init()">
<script type="text/javascript">
function init()
{
    document.getElementById("message").focus();
}

</script>
<textarea id="message" rows=10 cols=40></textarea>
</body>
</html>

Ensuite, j'exécute le test1.html et clique sur le bouton et test2.html apparaît avec un focus sur la zone de texte.

6
Hasib Hasan Arnab

Vous pouvez également utiliser setTimeout quel que soit l'événement.

setTimeout(function() {
    document.getElementById("elementId").focus();
}, 0);
5
Ishan Liyanage