71 votes

jQuery : Comment obtenir l'objet événement dans une fonction de gestionnaire d'événement sans le passer en argument ?

J'ai un onclick sur mon lien :

 <a href="#" onclick="myFunc(1,2,3)">click</a>

Cela pointe vers ce gestionnaire d'événements en JavaScript :

 function myFunc(p1,p2,p3) {
    //need to refer to the current event object:
    alert(evt.type);        
}

L'objet événement "evt" n'étant pas passé à un paramètre, est-il toujours possible d'obtenir cet objet ?

J'ai essayé window.event et $(window.event) , mais les deux sont undefined .

Une idée?

15voto

otakustay Points 3812

dans IE, vous pouvez obtenir l'objet événement par window.event dans d'autres navigateurs sans 'use strict' , il est possible d'obtenir par arguments.callee.caller.arguments[0] .

 function myFunc(p1, p2, p3) {
    var evt = window.event || arguments.callee.caller.arguments[0];
}

1voto

Si vous appelez votre gestionnaire d'événements sur le balisage, comme vous le faites maintenant, vous ne pouvez pas (navigateur x). Mais si vous liez l'événement click avec jquery, c'est possible de la manière suivante :

Balisage :

   <a href="#" id="link1" >click</a>

Javascript :

   $(document).ready(function(){
      $("#link1").click(clickWithEvent);  //Bind the click event to the link
  });
  function clickWithEvent(evt){
     myFunc('p1', 'p2', 'p3');
     function myFunc(p1,p2,p3){  //Defined as local function, but has access to evt
        alert(evt.type);        
     }
  }

Depuis l'événement ob

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