2013-03-12 7 views
8

私はdiv内にいくつかのリンク/ボタンを使って動的にjQueryを作成しています。この部門がフォーカスを失ったら、私はそれを削除する必要があります。この部分は大丈夫です。divと子どものためのjQueryフォーカスアウト

しかし、今はdivのラッパーにfocusoutイベントがあります。div内のボタンをクリックすると、ラッパーは子にフォーカスを失い、イベントが発生します。クリックされた要素が私ができるラッパーの子であるかどうかを確認しますが、ラッパーにはフォーカスがないので、divを削除するためにイベントが再び発生しません。

私はまた、ぼかしを試みましたが、これはうまくいきません。

これを行うにはどのような方法が最適ですか?

+0

フィドルを提供してください。 – honk31

+2

あなたのコードを投稿し、*任意で*フィドルを提供してください。 –

答えて

12
$("#yourDiv").focusout(function() { 
    if ($(this).has(document.activeElement).length == 0) { 
     // remove div 
    } 
}); 

$(this) =あなたが集中している部門。

document.activeElement =現在フォーカスが当てられている要素。能動素子は、あなたのdiv要素の子

+0

ありがとう、完璧に動作:)他の応答のリンクが壊れている、チェックできませんでした。 –

+0

これは私にとっても同様に解決されました。ありがとうございました! – rusvdw

+7

この時点で新しい要素はまだフォーカスを受けていないので、私はうまくいきませんでした。それで、activeElementはbodyです。 – Bill

1

イベント引数で与えられたrelatedTargetを使用している無地のJavaScriptでこれを解決する方法であれば

$(this).has(document.activeElement)は単純にチェックされています

element.addEventListener('focusout', function(event) { 
    if (element.contains(event.relatedTarget)) { 
     // don't react to this 
     return; 
    } 
    // do something 
}); 
関連する問題