web-dev-qa-db-ja.com

JavaScriptで、子ウィンドウとして呼び出された場合、focus()を使用したテキストエリアの設定が機能しない

Oninit関数のtextareaにフォーカスを設定する簡単なテストページがあります。ただし、ページが子として呼び出された場合、正確なコードはこれを実行できません。

警告ボックスを置くと、oninit関数が呼び出されていることがわかりますが、テキストボックスにフォーカスを置くことができません。ただし、リロードを押すと正しくフォーカスされます。

したがって、私のコードがメインページで呼び出されたときに完全に機能し、reloadが呼び出された場合に子でも機能することを考えると、なぜ最初に機能しないのですか?

<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>

ここでできることは賢いことではありません。ページがwindow.open( "test2.html")によってロードされた場合にのみ機能しません。

13
Ian Smith

どのブラウザを使用していますか? chrome&IE。Firefoxでチェックします。コードは完全に実行され、テキストエリアに焦点を当てています。

同じディレクトリに2つのファイルtest1.htmlとtest2.htmlを作成します。 test1.htmlに次のコードを挿入します。

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

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

そして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>

次に、test1.htmlを実行してボタンをクリックすると、text2にフォーカスしたtest2.htmlが表示されます。

6

イベントに関係なくsetTimeoutを使用することもできます。

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