18

編集: Windows 8 で開発したことがない場合は、この質問に答えようとしないでください。それに投票しないでください。読まないでください。これは Web アプリまたは Web サイトではなく、ブラウザーで実行されません。理解できないコンテンツへのマイナス投票はやめてください。これは、Windows ランタイム環境で実行される Windows 8 METRO HTML5/js アプリケーションです。

元の質問:

入力ボックスでカーソルを「点滅」させ、入力を受け取る準備ができているようにします。フォーカスを設定するためにjavascriptを使用しています。これは機能していません:

document.querySelector("#input-box").focus();

理由を知っている人はいますか?focus メソッドはこれに使用する正しいものではありませんか?

ありがとうございました。

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

4

5 に答える 5

10

テキスト ボックスのみを使用してこの小さなテスト プロジェクトを作成し、onload であなたとまったく同じ方法でフォーカスを設定しました。エミュレーターとローカル マシンの両方で試してみましたが、どちらの方法でも機能するようです。

このプロジェクトがあなたのマシンで機能しているか試していただけますか? また、焦点を合わせようとしているときについて、もう少し洞察をいただけますか? 現在、あなたの質問には、それがいつ起こっているかについての情報があまりありません。

サンプルは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();
        }
于 2012-05-25T06:58:17.833 に答える
1

あなたはどのビルドにいますか?コンシューマ プレビューまたはその他の開発プレビュー 私はDP6(MSパートナーが利用可能)を使用しており、JS標準のものは機能します。

私のdefault.htmlには次のものがあります。

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

そして、default.js の app-launched-loaded ボイラープレート関数に次のように記述します。

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 しました。見たい場合。

于 2012-05-25T06:25:38.600 に答える
0

これが役立つかどうかを確認するためにこれを試してください:

if(document.createEvent) 
{
    document.getElementById('input-box').dispatchEvent('DOMFocusIn');
} 
else 
{
    document.getElementById('input-box').fireEvent('DOMFocusIn', event);
}
于 2012-05-23T13:59:32.733 に答える
0

次のような非jqueryの通常のjavascriptを使用してみてください

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

于 2012-05-21T18:55:03.927 に答える