2013-10-12 4 views
8

oninit関数のテキストエリアにフォーカスを設定する簡単なテストページがあります。しかし、ページが子として呼び出された場合、正確なコードはこれを実行できません。Javascriptの設定では、子ウィンドウとして呼び出された場合、focus()が設定されたテキストエリアが機能しません。

警告ボックスを置くと、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")によって読み込まれた場合は動作しません。

+1

「ページが子供として呼び出された場合」とはどういう意味ですか? – jfriend00

+0

@ jfriend00彼は 'window.open( '')'の意味があると思う。 – Dvir

答えて

4

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

同じディレクトリにtest1.htmlとtest2.htmlの2つのファイルを作成します。 test1.htmlで 私はtest1.htmlを実行し、ボタンやtest2.htmlをクリックするよりも、私はfollwingコード..

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

を挿入テキストエリアに焦点を当てて表示されます。

+0

私は私のchromebookでGoogle chromeを使用しています。 window.open( 'test2.html'、 ""、 'width = 530px、height = 230px')の呼び出しを変更して、テストコードでエラーを再現しました。 –

+0

変更に応じて、window.openも変更されます。しかし、コードは完璧に動作し、テキストエリアに焦点を当てています。 –

+0

最後に、クロムブックのポート80を開き、Macを接続する方法を見つけました。テストページは、MacのSafari、Chrome、Firefoxで期待どおりに動作します。だから、ChromeのArmバージョンのバグのように見えます。これが、私がそれがうまくいくはずだったはずだと信じていた私を困惑させた理由です。 –

0

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

setTimeout(function() { 
    $('#elementId').focus(); 
}, 0); 
+0

これは、問題が指定されたjavascriptを呼び出すときにjqueryを利用しています。私はそれが髪を分割するように思えるが、jqueryが利用できない場合がある。 – Bueno

+1

私は知っていますが、代わりの回答を入れる方が良いですから、コミュニティは質問を複製して同じ回答を再投稿するのではなく、コミュニティから利益を得ることができます。私は、あなたが地域ガイドラインについて学ぶほうがよいと思います。 –

+0

Ishan Liyanageは右@Buenoです。私はちょうど彼の答えによって助けられた。 –

関連する問題