Avec du code jQuery comme:
$("#myid").click(myfunction);
function myfunction(arg1, arg2) {/* something */}
Comment puis-je passer des arguments à myfunction
tout en utilisant jQuery?
javascript
jquery
Edward Wong Hau Pepelu Tivrusk
la source
la source
Réponses:
Le moyen le plus simple est de le faire comme ceci (en supposant que vous ne voulez pas que les informations d'événement soient transmises à la fonction) ...
jsFiddle .
Cela crée une fonction anonyme, qui est appelée lorsque l'
click
événement est déclenché. Cela appellera à son tourmyfunction()
les arguments que vous fournissez.Si vous souhaitez conserver
ThisBinding
(la valeur duthis
moment où la fonction est appelée, définie sur l'élément qui a déclenché l'événement), appelez la fonction aveccall()
.jsFiddle .
Vous ne pouvez pas passer la référence directement comme l'indique votre exemple, ou son seul argument sera l' objet jQuery
event
.Si vous ne voulez passer la référence, vous devez tirer parti de jQuery
proxy()
fonction ( ce qui est un wrapper croix navigateur pourFunction.prototype.bind()
). Cela vous permet de passer des arguments, qui sont liés avant l'event
argument.jsFiddle .
Dans cet exemple,
myfunction()
serait exécuté avec sonThisBinding
intact (null
n'est pas un objet, donc lathis
valeur normale de l'élément qui a déclenché l'événement est utilisée), avec les arguments (dans l'ordre)arg1
,arg2
et enfin l'event
objet jQuery , que vous pouvez ignorer si ce n'est pas obligatoire (ne le nommez même pas dans les arguments de la fonction).Vous pouvez également utiliser les
event
objets jQuerydata
pour transmettre des données, mais cela nécessiterait de les modifiermyfunction()
pour y accéder viaevent.data.arg1
(qui ne sont pas des arguments de fonction comme votre question le mentionne), ou au moins d'introduire une fonction de proxy manuelle comme le premier exemple ou celui généré en utilisant ce dernier exemple.la source
myfunction(this, arg1, arg2)
depuis le gestionnaire anonyme. Alors votre fonction peut fairemyfunction(el, arg1, arg2) { alert($(el).val()); }
myfunction.call(this, arg1, arg2)
.Vous permet également de lier et de dissocier des gestionnaires d'événements spécifiques à l'aide des méthodes on et off.
Exemple:
Cela dissocierait le gestionnaire myfunction de #myid
la source
alors que vous devriez certainement utiliser la réponse d'Alex, la méthode "bind" de la bibliothèque prototype a été normalisée dans Ecmascript 5, et sera bientôt implémentée en natif dans les navigateurs. Cela fonctionne comme ceci:
la source
this
défini sur un contexte différent si vous utilisez cette méthode, par exemple, sibind()
elle estthis
dans ce contexte (global), ce gestionnaire de clics peut avoir l'window
objetthis
plutôt qu'une référence à l'#myid
élément?people reading my answers are smart enough to figure these details out themselves
, pas à propos d'Ecmascript.Ancien fil, mais à des fins de recherche; essayer:
... et consultez le paramètre "data": http://api.jquery.com/on/
par exemple:
la source
Il y a déjà d'excellentes réponses, mais de toute façon, voici mes deux cents. Vous pouvez aussi utiliser:
$("#myid").click({arg1: "foo", arg2: "bar"}, myfunction)
Et l'auditeur ressemblerait à:
function myfunction(event){ alert(event.data.arg1); alert(event.data.arg2); }
la source
Facile:
la source