44 votes

Evénement Internet Explorer et JavaScript currentTarget

Est-il possible de prendre la cible actuelle d'un événement avec IE 7 ou 8?

Avec d’autres navigateurs (firefox, opera, chrome, etc.), nous pouvons utiliser event.currentTarget ou le mot clé this pour faire référence à l’objet qui traite l’événement.

Mais dans Internet Explorer, nous n'avons pas la propriété currentTarget et le this fait référence à un objet window!

Alors, comment puis-je faire ça?

30voto

alvincrespo Points 2351

Vous pouvez faire quelque chose comme

 target = (event.currentTarget) ? event.currentTarget : event.srcElement;
 

Bien que, comme @Marc l’ait mentionné, vous pouvez utiliser un framework JQuery qui normalise l’événement pour vous.

25voto

gpasse Points 1198

J'ai eu le même problème. Je l'ai résolu utilisant le mot - this comme indiqué dans un article sur brainjar.com

Pour obtenir l'équivalent de la propriété currentTarget dans IE, utilisez la ce mot-clé comme argument lors de la configuration du gestionnaire d'événement dans une balise.

...

fonction myHandler(événement, lien) { ... }

Sur la même page, vous pouvez trouver le tableau suivant :

enter image description here

13voto

La réponse courte est: utiliser jQuery.

Bien qu' event.currentTarget n'est pas accessible sur IE, jQuery va normaliser l'événement pour vous de sorte que votre code fonctionne également sur IE (comme indiqué ici)

Notez que l'utilisation de event.srcElement, comme il est suggéré dans d'autres réponses, c'est de ne pas équivalentes, srcElement correspond à l' target, pas à currentTarget, comme il est expliqué à la fin de cette page.

2voto

Anas Points 21

avec cette fonction, vous pouvez passer l'objet lors de l'ajout et l'obtenir dans le programme d'écoute. le problème à ce sujet est que vous avez une fonction anonyme en tant que eventlistener et qu'en actionscript vous ne pouvez pas supprimer un auditeur anonyme. ne sais pas js.

 addEvent:function(object,type,listener,param)
    {
    if(object.addEventListener)
      object.addEventListener(type, function(e){ listener(object, e, param);}, false );
    else
    if(object.attachEvent)
      object.attachEvent('on'+type, function(e){ e = getEvent(e); listener(object, e, param);});
    },

getEvent:function(e)
        {
    if(!e) e = window.event; // || event
    if(e.srcElement) e.target = e.srcElement;
    return e;
    },

removeEvent:function(object,type,listener)
    {
    if(object.removeEventListener)
    object.removeEventListener(type, listener, false);
    else
    object.detachEvent('on'+type, listener);
    }

var div = document.getElementById('noobsafediv');
var div2 = document.getElementById('noobsafediv2');
addEvent(div,'mouseover',mouseover,['astring',111,div2]);


function mouseover(object,e,param)
 {
 console.log(object,e,param);
 }
 

c'est mon cadre et je l'appelle jNoob.

1voto

Tom Points 415

Je suis en supposant que vous êtes désireux d'utiliser le " ce " contexte parce que le même gestionnaire sera traiter avec multliple posible objets. Dans ce cas, voir l'excellent AddEvent script à partir de la quirksmode recodage du concours. (http://www.quirksmode.org/blog/archives/2005/09/addevent_recodi.html). Ce code m'a permis d'obtenir le dernier de ma javascript de html. Plus important encore, il semble fonctionner sur tous les navigateurs que j'ai testé. Simple et compact.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X