43

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

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

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

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

4

4 に答える 4

48

秘訣は、余分なティックを待つことです。

$(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);
})
于 2012-07-18T15:17:20.227 に答える
40

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

$(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);
    });​​

});
于 2012-07-18T15:20:53.060 に答える
7

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

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

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

于 2012-07-18T15:13:40.880 に答える
1

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

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

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

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

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

于 2012-07-18T15:12:18.853 に答える