JavaScriptでフォーカスをどのようにクリアしますか?


159

これはそれほど難しいことではないことはわかっていますが、Googleで答えを見つけることができませんでした。

どの要素にフォーカスがあるかを事前に知らなくても、要素が何であれフォーカスをクリアするJavaScriptを実行したいと思います。それは、Firefox 2だけでなく、より最近のブラウザーでも機能する必要があります。

これを行う良い方法はありますか?


明確な焦点とはどういう意味ですか?-ぼかしと同じですか?
プロダー2010年

3
ブラウザのどの要素にもフォーカスがないようにしたいのですが。
アンドレス

回答:


170

回答: document.activeElement

やりたいことを行うには、 document.activeElement.blur()

Firefox 2をサポートする必要がある場合は、これも使用できます。

function onElementFocused(e)
{
    if (e && e.target)
        document.activeElement = e.target == document ? null : e.target;
} 

if (document.addEventListener) 
    document.addEventListener("focus", onElementFocused, true);

8
ブラウザ共有が0.66%のFirefox 2が取引ブレーカーである場合...私は修正を行いました。これは編集した回答にあります。
jps 2010年

21
2013年、Firefox 2のブラウザーシェアは0.66%を大幅に下回っdocument.activeElement.blur()ています。この効果を達成するには、シンプルが最善の方法です。
chowey 2013年

88

.focus()次に.blur()、ページ上の任意の何か。フォーカスを持つことができる要素は1つだけなので、その要素に転送されてから削除されます。


フォーカスを持つ非表示の要素を作成する方法はありますか?
アンドレス

1
私はそのための最良の方法の専門家ではありません。ただし、画面外またはoverflow: clipスタイル付き要素の境界の外に配置することもできます。ただし、ページに既に存在するフィールドを使用することもできます。または、目的のためだけに作成して、もう一度削除します。
ケビン・リード、

画面外の要素にフォーカスを設定すると、その要素へのスクロールが強制されると思います。ただし、目的のために非表示の要素を作成できます。とはいえ、一部のブラウザではキャレットを削除するのが難しい場合があります。おそらくblur()のほうがうまくいくでしょう。keyup(keydown)イベントハンドラーでもキーを取得できます。
Alexis Wilke、2015年

5
この回答は、期限が切れているとのように、2017年の使用activeElement代わりに年には適用されませんstackoverflow.com/a/2520670/39808
ポール・フィッシャー

それはまだ機能しますが、より長く、フォーカスを移動します(これはTABナビゲーションに干渉する可能性があります)また、「その他の何か」が何であるかがすぐにわかりません。
user202729

50
document.activeElement.blur();

IE9では正しく動作しません-アクティブな要素がドキュメントボディの場合、ブラウザーウィンドウ全体がぼやけます。このケースを確認することをお勧めします:

if (document.activeElement != document.body) document.activeElement.blur();

それは事実ですが、今日ではほとんど誰もIE9を使用していません。
ドナルドダック

18

TypeScriptを使用する場合、選択された要素の種類がわからない可能性があるため、ここで提供される答えは完全に正しいものではありません。

したがって、これが推奨されます。

if (document.activeElement instanceof HTMLElement)
    document.activeElement.blur();

結果として生じるぼかしは公式の仕様の一部ではなく、いつでも壊れる可能性があるので、私はさらに、受け入れられた回答で提供されているソリューションを使用しないようにします。


6
2010年に私が尋ねた質問が、進化し続ける答えを持っている様子を見るのは楽しいです。
アンドレス

2

dummyElem.focus()ここで、dummyElemは非表示オブジェクトです(たとえば、負のzIndexがあります)?


0

window.focus();を呼び出すことができます。

ただし、フォーカスを移動したり失ったりすると、タブキーを使用してページを移動する人の邪魔になります。

キーコード13をリッスンし、タブキーが押された場合の効果を無視できます。


-3

jQueryを使用すると、次のようになります。 $(this).blur();


2
これは古い回答ですので、今ではご存知かもしれませんが、この回答が当てはまらない2つの理由があります。1. OPがjqueryを使用していることを前提としています。2。thisフォーカスされた要素である必要がありますが、質問ではOPがフォーカスされた要素を事前に認識していないことを明示しています。
ブランドン、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.