web-dev-qa-db-ja.com

jquery blur()イベントをトリガーしたクリックされたオブジェクトを取得します

私がこれを行うと仮定します:

$(target).blur(function(e){
  //do stuff
});

ぼかしアクションをトリガーするためにクリックされたオブジェクトを取得する方法はありますか?

e.targetを使用してみましたが、クリックされたオブジェクトではなく、ぼかしアクションにアタッチされたオブジェクトが返されているようです。

40
pillarOfLight

私があなたの質問を正しく理解していれば、これはそれをするはずです:

$(function() {

    var clicky;

    $(document).mousedown(function(e) {
        // The latest element clicked
        clicky = $(e.target);
    });

    // when 'clicky == null' on blur, we know it was not caused by a click
    // but maybe by pressing the tab key
    $(document).mouseup(function(e) {
        clicky = null;
    });

    $(target).blur(function(e) {
        console.log(clicky);
    });​​

});
37
daryl

トリックは、追加のティックを待つことです:

$(el).blur(function (event) {
    // If we just hangout an extra tick, we'll find out which element got focus really
    setTimeout(function(){
       document.activeElement; // This is the element that has focus
    },1);
})
43
blockhead

イベントハンドラー内では、thisはイベントがバインドされる要素になり、e.targetは、イベントをトリガーした要素になります(thisと同じ場合もそうでない場合もあります)。

blurイベントではなく、clickイベントを処理しています。したがって、イベント内には、bluredした要素があります。 clicked要素が必要な場合、それを取得するには別のイベントが必要です。

blurは、何かに焦点を合わせるなど、他のイベントによってトリガーできます。何かをクリックするだけではありません。そのため、「ぼかしを引き起こした」要素を取得する方法はありません。

7
Rocket Hazmat

blurハンドラー関数内でこれを使用すると、blured要素が得られます。

_$(target).blur(function(e){
   var bluredElement = this;  // dom element
   // To make a jQuery object 
   var bluredElement = $(this);
});
_

blurイベント内では、クリックされた要素をキャッチできません。 clicked要素を取得するには、clickイベントが必要です。例えば:

_$(element).click(function() {
  var clickedElement = this;
});
_

フォーカスされた要素を取得するには、次のような_:focus_セレクターを使用できます。$(':focus')は、ドキュメント内のフォーカスされた要素を返します。

1
thecodeparadox