2012-05-21 6 views
14

編集: Windows 8で開発していない場合は、この質問に回答しないでください。それに投票しないでください。それを読むことさえしないでください。これはウェブアプリやウェブサイトではなく、ブラウザでは実行されません。あなたが理解していない内容の投票をやめてください。これはWindows Runtime環境で動作するWindows 8 METRO HTML5/jsアプリケーションです。ListViewのItemInvokedイベントから入力ボックスのフォーカスをプログラムで設定しました[Windows 8 Metro HTML5]

オリジナル質問:

私は入力を受信する準備ができて、カーソルが入力ボックスに「点滅」することにしたいです。私はフォーカスを設定するためにJavaScriptを使用しています。これは動作していません:

誰でも知っていますか?フォーカスメソッドはこれに使用する正しいメソッドではありませんか?

ありがとうございます。

編集#2:これは、ListViewの「itemInvoked」イベントからの入力にフォーカスを設定しようとしているという事実とは関係があります。イベントは正常に発生しており、イベントハンドラから要素にアクセスでき、実行中にエラーが発生していません。標準のボタンクリックイベントから入力タグにフォーカスを設定できますが、ItemInvokedイベントからはフォーカスを設定できません。だから問題は、なぜ私はこのイベントハンドラ内からフォーカスを設定できないのですか?

+1

私は「Windowsの8」は、私たちがここで必要な正しい情報ではないと思います。あなたが使っているブラウザはどうですか?また、 'autofocus'属性を考慮してください。 – MaxArt

+1

'Windows 8'とは、IE 8を意味しますか? – honyovk

+4

「Windows 8」とは、Windows 8を意味します。 – JT703

答えて

5

私はこの小さなテストプロジェクトをテキストボックスだけで作成し、オンロードではまったく同じようにフォーカスを設定しました。エミュレータとローカルマシンの両方で試してみましたが、どちらの方法もうまくいくようです。

このプロジェクトがあなたのマシン上で動作していれば試してみることができますか?そして、あなたが焦点を当てようとしているときにあなたに私たちにいくつかの洞察を与えることができますか?あなたの質問には、今起こっていることについての多くの情報はありません。

あなたがここにhttp://www.playingwith.net/Temp/TestFocusApplication.zip

上のサンプルをダウンロードすることができます更新

さて、あなたは動作しているようですテキストボックスにフォーカスを設定する関数でmsSetImmediate関数を呼び出す場合は、それを発見したように見えます。私はテストサンプルをアップロードするオプションがありませんので、ItemInvokedハンドラを付けてsetFocus関数を呼び出すコードを見つけてください。

var listView = document.getElementById("basicListView"); 

       listView.winControl.addEventListener("iteminvoked", function (evt) { 
        if (listView.winControl.selection.count() > 0) {       
         msSetImmediate(setFocus); 
        } 
       }); 

function setFocus() { 
      //Set focus on input textbox; 
      var input = document.querySelector("#input-box") 
      input.focus(); 
     } 
+0

フォーカスイベントのトリガーとして呼び出されているリストビュー項目を使用するようにサンプルを更新できますか?私はこれが核心の問題だと信じています。 – JT703

+0

私はあなたの入力に基づいて私たちの例を更新するのではなく、問題のあるサンプルアプリケーションを提供する方が良いでしょう。あなたがサンプルを送ったら、本当にあなたの問題を調べたいと思います。 – ChristiaanV

+0

申し訳ありませんが、私はそれをすることはできません。間違いなくリストビューの問題です。誰かがそれを理解することができれば、それが解決策になるでしょう。 – JT703

0

document.getElementById('myElementsID').focus()

+0

jqueryを使用していません。これはWin8のメトロアプリです。私はあなたの提案を試みたときに何も変わっていません。 – JT703

+0

あなたの要素にidが確実に存在していますか?また、このjavascriptを呼び出すときに要素が存在することを確認していますか? –

+0

はい。私は肯定的です。私はそれを介してデバッグした要素は間違いなくそこにある。 – JT703

0

のような非jqueryの通常のJavaScriptを使用してみてくださいそれが助けかどうかを確認するために、これを試してみてください:

あなたがオンになっているの構築
if(document.createEvent) 
{ 
    document.getElementById('input-box').dispatchEvent('DOMFocusIn'); 
} 
else 
{ 
    document.getElementById('input-box').fireEvent('DOMFocusIn', event); 
} 
+0

最初のブロックに入り、 'DOMFocusIn'が '無効な引数'であるというエラーがスローされます。 – JT703

+0

'DOMFocusIn'を' onfocus'に置き換えてみてください。 – BenM

+0

同じもの。それは非常にイライラしています。このWinRTプラットフォームは、標準のWeb開発者とは非常に異なっています。 – JT703

1

を?コンシューマプレビューや他のdevのプレビュー?私はDP6(MSパートナーが利用可能)で、JS標準のものが動作します。私が持っている私にdefault.htmlで

:私にDefault.jsで

<input id="input1" type="text" value="one"/> 
<input id="input2" type="text" value="two"/> 
<input id="focus_btn" type="button" value="Set focus 1"/> 
<input id="focus_btn2" type="button" value="Set focus 2"/> 

そしてを、私は持っているアプリ-打ち上げ仕掛け定型機能で:

document.querySelector('#focus_btn').addEventListener('click', function() { 
    var input1 = document.querySelector('#input1').focus();    
}); 

document.querySelector('#focus_btn2').addEventListener('click', function() { 
    var input1 = document.querySelector('#input2').focus();    
}); 

唯一の理由私はそれが機能していないと考えることができるのは、要素が準備が整う前にアクセスされているということです。それ以前のバグはビルドします。私はあなたが見たい場合は、http://www.mediafire.com/?ghz49gtfxlgr7enに解決策rar'dを持っています。

+0

この例は、ほぼ正確に私がしようとしていることです[クリックイベントに焦点を当てる]。あなたの要素/イベントハンドラを私のプロジェクトにコピーして貼り付けて、うまくいきました。それはまさに私がやっていることですが、私の場合はまだ動作していません。私が考えることができる唯一の違いは、クリックがリストビューアイテムから来ていることです。イベントが正常に発生し、入力要素が確実に存在し、行が実行されていますが、何も起こっていません。また、入力タグはフォームタグ内にあります。私はそれが重要かどうかわからない。 – JT703

+0

それは間違いなくListViewと、イベントが "itemInvoked"イベントであることと関係があります。私はフォームがそれとは関係がないことを確認しました。標準のボタンクリックイベントから入力タグにフォーカスを設定できますが、このItemInvokedイベントからフォーカスを設定することはできません。だから問題は、なぜ私はこのイベントハンドラ内からフォーカスを設定できないのですか? – JT703

+1

物事の流れ(クリックされると、どの要素がどこで変更されるかなど)に関する情報をもっと与えることができれば嬉しいです。 - 入力要素が実際にstyle.visibility = 'collapse'にして、dom操作がまったく機能するかどうかを確認してください。 - もしそうなら、焦点競争状態の問題になる可能性があります。リストビューは、アイテムにフォーカスを設定すること(例えば、アイテムをクリックすると、アイテムが現在フォーカスされているなど)の裏側で多くのことを行います。これが問題であるかどうかをテストするには、setTimeOutを実行して入力セットのフォーカスを遅らせます。 –

0

質問は非常に古いですが。しかし、私はこれを解決するために奮闘しました。

最初の.focus()はフォーカスを設定した値を返しません。未定義が返されます。

また、いくつかの要素にフォーカスを置くと、その要素にtabindexが存在することを確認します。そうでなければ、(主にクロムに)フォーカスしません。

次のクエリを使用することができる。

element.querySelector('#label').setAttribute('tabindex','0'); 
element.querySelector('#label').focus(); 
関連する問題