$('#id').focus()
入力をフォーカス(アクティブ)する必要があります。私はこれを動作させるようには思えません。
このサイトのコンソールでも、検索ボックスで試しています
$('input[name="q"]').focus()
そして、私は何も得ていません。何か案は?
focus()
機能に干渉する可能性があります。詳細
$('#id').focus()
入力をフォーカス(アクティブ)する必要があります。私はこれを動作させるようには思えません。
このサイトのコンソールでも、検索ボックスで試しています
$('input[name="q"]').focus()
そして、私は何も得ていません。何か案は?
focus()
機能に干渉する可能性があります。詳細
回答:
実際、あなたがこのサイトに集中するために挙げた例は、コンソールに集中していなければ問題なく機能します。機能しない理由は、単に開発コンソールからフォーカスを奪っていないためです。コンソールで次のコードを実行し、その後すぐにブラウザーウィンドウをクリックすると、検索ボックスがフォーカスされていることがわかります。
setTimeout(function() { $('input[name="q"]').focus() }, 3000);
もう一つは、過去に困ったことの一つがイベントの順番です。DOMにアタッチされていない要素に対してfocus()を呼び出すことはできません。フォーカスしようとしている要素はすでにDOMにアタッチされていますか?
setTimeout
操作順序の問題を解決するためにを使用すると、維持するのが非常に困難になります。バグが見つかった場合、デバッグは非常に困難です。要素をDOMに挿入する場所はどこでも、そこから呼び出す必要が.focus()
あります。
ネット上の他の場所で解決策を見つけました...
$('#id').focus();
動作しませんでした。
$('#id').get(0).focus();
働いた。
ここでの回答のいくつかは、を使用setTimeout
してターゲット要素に焦点を合わせるプロセスを遅らせることを提案しています。それらの1つは、ターゲットがモーダルダイアログ内にあると述べています。setTimeout
ソリューションが使用された場所の具体的な詳細を知らない限り、ソリューションの正確性についてさらにコメントすることはできません。しかし、私がここで答えを出して、私と同じようにこのスレッドに遭遇した人々を助ける必要があると考えました
問題の簡単な事実は、まだ表示されていない要素に焦点を合わせることができないということです。この問題が発生した場合は、ターゲットに焦点を合わせようとしたときに、ターゲットが実際に表示されていることを確認してください。私自身の場合、私はこれらの線に沿って何かをしていました
$('#elementid').animate({left:0,duration:'slow'});
$('#elementid').focus();
これは機能しませんでした。私はコンソールから$( '#elementid')。focus() `を実行したときに何が起こっているのかを理解しましたやった仕事を。違いは、ターゲットの上の私のコードでは、アニメーションが完了していない可能性があるため、ターゲットが実際に表示されるかどうかは確実ではありません。そして、手がかりがあります
$('#elementid').animate({left:0,duration:'slow',complete:focusFunction});
function focusFunction(){$('#elementid').focus();}
期待どおりに動作します。私も最初はsetTimeout
解決策、それもうまく。ただし、任意に選択したタイムアウトは、ホスト要素がターゲット要素が表示されることを確認するプロセスの進行速度に応じて、遅かれ早かれソリューションを中断するようにバインドされています。
visibility:hidden
- フォーカスされません。
他の誰かがこの質問に遭遇し、同じ状況にあった場合に備えて-別の要素をクリックした後にフォーカスを設定しようとしましたが、フォーカスが機能していないように見えました。それは私がちょうど必要だったことがわかりましたe.preventDefault();
-ここに例があります:
$('#recipients ul li').mousedown(function(e) {
// add recipient to list
...
// focus back onto the input
$('#message_recipient_input').focus();
// prevent the focus from leaving
e.preventDefault();
});
これは役立ちました:
mousedownイベントハンドラーからHTMLElement.focus()を呼び出す場合は、event.preventDefault()を呼び出して、フォーカスがHTMLElementから離れないようにする必要があります。ソース:https : //developer.mozilla.org/en/docs/Web/API/HTMLElement/focus
これは古いことに気づきましたが、今日出会いました。答えはどれもうまくいきませんでした。うまくいったとわかったのはsetTimeoutです。setTimeoutを使用して、モーダルの入力フィールドに焦点を当てたいと思いました。お役に立てれば!
setTimeout
は悪い解決策です。ユーザーのマシンでの実行時間は保証できないため、時間に依存するものは非常に脆弱です。
私もこの問題を抱えていました。私の場合に機能した解決策は、HTML要素のtabindexプロパティを使用することでした。
使っていた ng-repeat
リスト内のいくつかのli要素していて、.focus()を使用して最初のliにフォーカスを移すことができなかったため、ループ中にtabindex属性を各liに単に追加しました。
だから今 <li ng-repeat="user in users track by $index" tabindex="{{$index+1}}"></li>
その+1は0から始まるインデックスです。また、.focus()関数を呼び出す前に、要素がDOMに存在することを確認してください
これがお役に立てば幸いです。
"$(element).show()"を使用したために機能しないという問題がある人のために。私はそれを次の方法で解決しました:
var textbox = $("#otherOption");
textbox.show("fast", function () {
textbox[0].focus();
});
したがって、タイマーは必要ありません。showメソッドの完了後に実行されます。
slideDown()
、fadeIn()
など
追加の解決策focus()が機能しないように見える同じ問題がありましたが、最終的に必要なのは正しい位置にスクロールすることでした。
私の場合、タブインデックスを指定する必要がありました(-1
スクリプトでのみフォーカス可能な場合)
<div tabindex='-1'>
<!-- ... -->
</div>