web-dev-qa-db-fra.com

Récupère l'objet cliqué qui a déclenché l'événement jquery blur ()

Supposons que je fasse ceci:

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

Existe-t-il un moyen de récupérer l'objet sur lequel vous avez cliqué afin de déclencher l'action de flou?

J'ai essayé d'utiliser e.target, mais cela semble renvoyer l'objet attaché à l'action de flou plutôt que l'objet cliqué.

40
pillarOfLight

Si je comprends bien votre question, cela devrait le faire:

$(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

L'astuce consiste à attendre un tick supplémentaire:

$(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

Dans un gestionnaire d'événements, this sera l'élément auquel l'événement est lié, et e.target sera l'élément qui a déclenché l'événement (peut ou non être le même que this).

Vous distribuez un événement blur, pas un événement click. Ainsi, à l'intérieur de votre événement, vous aurez l'élément que vous blured. Si vous voulez l'élément clicked, vous auriez besoin d'un autre événement pour l'obtenir.

blur peut être déclenché par d'autres événements, tels que la mise au point de quelque chose; pas seulement en cliquant sur quelque chose. Il n'y a donc aucun moyen d'obtenir l'élément qui "a provoqué le flou".

7
Rocket Hazmat

L'utiliser dans la fonction de gestionnaire blur vous donnera l'élément blured.

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

Dans l'événement blur, vous ne pouvez pas attraper l'élément cliqué. Pour obtenir l'élément clicked, vous avez besoin de l'événement click. Par exemple:

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

Et pour obtenir l'élément focalisé, vous pouvez utiliser le sélecteur :focus Comme: $(':focus') retournera votre élément focalisé dans le document.

1
thecodeparadox