jQueryがフォーカスイベントを失う


253

入力フィールドがフォーカスを取得した場合にコンテナーを表示し、フォーカスが失われた場合はコンテナーを非表示にしようとしています。これが実際の問題です。jQueryに焦点を当てた反対のイベントはありますか?

いくつかのサンプルコード:

<input type="text" value="" name="filter" id="filter"/>

<div id="options">some cool options</div>

<script type="text/javascript">
  $('#options').hide();

  $('#filter').focus(function() {
    $('#options').appear();
  });
</script>

そして、私がしたいのは次のようなものです:

$('#filter').focus_lost(function() {
  $('#options').hide();
});

回答:


419

要素がフォーカスを失ったときに、blurイベントを使用して関数を呼び出します。

$('#filter').blur(function() {
  $('#options').hide();
});

3
chromeのようなブラウザがテキストボックスを自動で埋めた場合、blur()がトリガーされないと思います
pita

40

このような:

$(selector).focusout(function () {
    //Your Code
});

10
これとの違いは何blurですか?
cregox

5
blurメソッドは、それが属しているオブジェクトからフォーカスを削除する(つまり、現在のものにしない)ために使用されます。テキストフィールドにぼかしを付けると、カーソルが次のフィールドに移動します。ウィンドウにぼかしを与えると、他のすべてのウィンドウの背後に移動します。これは予約語ではないため、blurと呼ばれる独自の変数または関数を宣言できますが、宣言すると、このメソッドを使用して現在のオブジェクトを制御できなくなります。
SoftwareARM

2
focusメソッドは、属しているオブジェクトにフォーカスを与える(つまり、現在のオブジェクトにする)ために使用されます。テキストフィールドにフォーカスを与えると、カーソルがそのフィールドに移動します。ウィンドウにフォーカスを与えると、他のウィンドウすべての前面に移動します。フォーカスがあるオブジェクトを使用するために適用する特定のオブジェクトを指定しないアクション。これは予約語ではないため、フォーカスと呼ばれる独自の変数または関数を宣言できますが、宣言すると、このメソッドを使用して現在のオブジェクトを制御できなくなります。
SoftwareARM

25
SoftwareARMの説明は最初はあまり理解できなかったので、jQueryのドキュメントページ(api.jquery.com/focusout)で、他の人に役立つと思われる別の説明を見つけました:focusoutイベントが要素に送信されますそれ、またはその中の要素がフォーカスを失ったとき。これは、親要素からのフォーカスの喪失の検出をサポートする(つまり、イベントバブリングをサポートする)点で、blurイベントとは異なります。
Brad


12

ぼかしイベント:要素がフォーカスを失ったとき。

focusoutイベント:要素またはその内部の要素がフォーカスを失ったとき。

フィルター要素の内部には何もないため、この場合はぼかしとフォーカスアウトの両方が機能します。

$(function() {
  $('#filter').blur(function() {
    $('#options').hide();
  });
})

ぼかしのあるjsfiddle:http ://jsfiddle.net/yznhb8pc/

$(function() {
  $('#filter').focusout(function() {
    $('#options').hide();
  });
})

focusout付きのjsfiddle:http ://jsfiddle.net/yznhb8pc/1/


0

フィールドがフォーカスされる前に 'Cool Options'がビューから非表示になっている場合は、スクリーンリーダーを使用している人に不要な情報が表示されないように、DOMでなく、JQueryで作成することをお勧めします。私たちがそれを見る必要がないとき、なぜ彼らはそれを聞く必要があるのでしょうか?

したがって、次のように変数を設定できます。

var $coolOptions= $("<div id='options'></div>").text("Some cool options");

フォーカスに追加(または追加)します

$("input[name='input_name']").focus(function() {
    $(this).append($coolOptions);
});

フォーカスが終了したら削除します

$("input[name='input_name']").focusout(function() {
    $('#options').remove();
});
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.