2009-10-13 2 views
6

Quand je tente de joindre les fonctions de gestionnaire d'événements avec des paramètres tels que:objet d'événement dans le gestionnaire d'événements

myhandle.onclick = myfunction(param1,param2); 

function myfunction(param1,param2){ 
} 

Maintenant, je veux accéder à l'objet de l'événement dans ma fonction de gestionnaire. Il y a une approche mentionnée sur le web d'envoyer objet événement, comme:

myhandle.onclick = myfunction(event,param1,param2); 

Mais son objet événement donnant undefined quand je le tester.

Je sais que les bibliothèques facilitent ce genre de choses, mais je recherche une option JS native.

Répondre

4

Je ne suis pas tout à fait sûr de ce que vous essayez de faire, mais peut-être quelque chose comme ceci est ce que vous cherchez?

function myfunction(param1, param2){ 
    return function(event) { 
     // For compatibility with IE. 
     if (!event) { 
      event = window.event; 
     } 

     alert("event = " + event + ", param1 = " + param1 + ", param2 = " + param2); 
    }; 
} 

myhandle.onclick = myfunction(param1, param2); 

Le résultat final est que la fonction anonyme à l'intérieur de myfunction sera appelé en tant que gestionnaire onclick, ce qui entraîne dans le cas où plus les deux paramètres en cours d'impression. Les deux paramètres sont fixés au moment où le gestionnaire d'événements est ajouté tandis que event change chaque fois que l'utilisateur clique sur myhandle.

0

Essayez ceci:

if (!event) { event = window.event; } 

intérieur de myfunction().

7

myhandle.onclick = mafonction (param1, param2);

Ceci est une erreur débutant courante au niveau du JavaScript, et pas quelque chose que les bibliothèques peuvent réellement corriger pour vous.

Vous n'êtes pas assignez myfunction en tant que gestionnaire de clic, vous êtes appelermyfunction, avec param1 et param2 comme arguments, et en attribuant la valeur de retour de la fonction à onclick. myfunction ne retourne rien, alors vous seriez undefined-onclick l'attribution, ce qui aurait aucun effet ..

Qu'est-ce que vous voulez dire est d'attribuer une référence à myfunction lui-même:

myhandle.onclick= myfunction; 

Pour passer le fonctionner certains arguments supplémentaires que vous avez à faire une fermeture contenant leurs valeurs, ce qui est généralement fait avec une fonction inline anonyme. Il peut prendre soin de passer l'événement trop si vous avez besoin (bien que de toute façon vous avez besoin d'un plan de sauvegarde pour IE où l'objet événement n'est pas passé comme argument):

myhandle.onclick= function(event) { 
    myfunction(param1, param2, event); 
}; 

Dans ECMAScript Cinquième édition, qui sera la future version de JavaScript, vous pouvez écrire encore plus facilement: (. avec window étant une valeur fictive pour this que vous aurez pas besoin dans ce cas)

myhandle.onclick= myfunction.bind(window, param1, param2); 

Cependant, depuis beaucoup de navigateurs d'aujourd'hui ne font pas Si vous voulez utiliser cette méthode, vous devez fournir une implémentation pour les anciens navigateurs.Certaines bibliothèques en incluent déjà une; voici un autre seul.

if (!('bind' in Function.prototype)) { 
    Function.prototype.bind= function(owner) { 
     var that= this; 
     var args= Array.prototype.slice.call(arguments, 1); 
     return function() { 
      return that.apply(owner, 
       args.length===0? arguments : arguments.length===0? args : 
       args.concat(Array.prototype.slice.call(arguments, 0)) 
      ); 
     }; 
    }; 
} 
+0

merci beaucoup! Cela explique joliment. – Rajat

Questions connexes