2009-09-05 7 views
20

Utilisation de jQuery Je souhaite lier une fonction existante à un bouton. Je suis dans la documentation et ont trouvé la méthode de liaison, mais les exemples sur le jQuery lier les fonctions nouvellement créées alors que je veux lier une fonction qui est déjà codé en dur, par exemple:Liaison d'une fonction JavaScript existante dans jQuery

function fHardCodedFunction(){ 
    //Do stuff 
} 

function fBindFunctionToElement(){ 
    $("#MyButton").bind("click", fHardCodedFunction()); 
} 


Est-ce possible ? Ou est-ce que je vais à ce sujet dans le mauvais sens?

+0

Voici la section connexe de la documentation de l'API jQuery: [** Sélecteur multiple **] (https://api.jquery.com/multiple-selector/) – informatik01

Répondre

33

La plaine fHardCodedFunction fait déjà référence à la fonction et le suffixe () l'appellera simplement. passer donc juste la fonction au lieu de l'appeler et de ce fait que passer la valeur de retour:

function fBindFunctionToElement(){ 
    $("#MyButton").bind("click", fHardCodedFunction); 
} 
+3

Que faire si je dois transmettre la fonction codée en dur paramètre? –

+10

@Jack Mills: Ensuite, vous devrez utiliser une fonction d'enrobage (anonyme) comme 'function() {return fHardCodedFunction (" foo "," bar "); } 'que vous passez en tant que fonction de rappel à' bind'. – Gumbo

+0

C'est presque ce que j'essaie de faire (j'utilise .click() à la place, mais pour autant que je sache, c'est la même chose). Cependant, ma fonction liée ne fonctionne pas - la fonction liée a-t-elle accès aux mêmes variables que la fonction click()? Ou peut-être lorsque vous utilisez la syntaxe '$ (" # mydiv "). Click (function() {$ (" # mydiv "). Hide();}', des variables cachées sont-elles passées à la fonction? –

2

Oui vous pouvez lier des méthodes qui écrit quelque part ailleurs, mais vous devez ignorer les parenthèses:

function fHardCodedFunction(){ 
    //Do stuff 
} 

function fBindFunctionToElement(){ 
    $("#MyButton").bind("click", fHardCodedFunction); 
} 
+0

Que faire si j'ai besoin passer la fonction codée en dur d'un paramètre? –

4

emprunt de les autres postes, vous pouvez paramétrer votre gestionnaire d'événements comme suit:

function fHardCodedFunction(someValue) { 
    alert(this.id + " - " + someValue); 
} 


function fBindFunctionToElement() { 
    var someValue = "whatever"; 
    $("#MyButton").bind("click", 
     function() { 
     fHardCodedFunction.apply(this, [someValue]); 
     } 
); 
} 


$(document).ready 
(
    function() { 
    fBindFunctionToElement(); 
    } 
); 

J'utilise applique ici parce que la fonction fHardCodedFunction Je voudrais que le this propriété à faire référence à l'élément MyButton. Notez également que apply attend un tableau pour le second paramètre, c'est pourquoi j'ai enveloppé someValue entre parenthèses.

Vous n'avez pas à le faire de cette façon et vous pouvez oublier complètement cette propriété this si vous préférez.

Questions connexes