2009-09-05 8 views
20

Uso di jQuery Desidero collegare una funzione esistente a un pulsante. Sono stato attraverso la documentazione e hanno trovato il metodo bind ma gli esempi sul jQuery legare funzioni di nuova creazione dove, come mi desidera associare una funzione che è già codificato duro, ad esempio:Associazione di una funzione JavaScript esistente in jQuery

function fHardCodedFunction(){ 
    //Do stuff 
} 

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


Questo è possibile ? O sto andando su questo nel modo sbagliato?

+0

Ecco la sezione correlata dalla documentazione dell'API jQuery: [** Selettore multiplo **] (https://api.jquery.com/multiple-selector/) – informatik01

risposta

33

Il codice fHardCodedFunction fa già riferimento alla funzione e il suffisso () lo chiamerà semplicemente. Quindi, basta passare la funzione invece di chiamarla e quindi solo di passaggio il valore di ritorno:

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

Cosa succede se devo passare la funzione hardcoded a parametro? –

+10

@Jack Mills: Quindi sarà necessario utilizzare una funzione di wrapping (anonima) come 'function() {return fHardCodedFunction (" foo "," bar "); } 'che passi come funzione di callback a' bind'. – Gumbo

+0

Questo è quasi quello che sto cercando di fare (sto usando .click() invece, ma per quanto posso dire, è lo stesso). Tuttavia, la mia funzione associata non funziona: la funzione associata ha accesso alle stesse variabili della funzione click()? O magari usando la sintassi '$ (" # mydiv "). Click (function() {$ (" # mydiv "). Hide();}', ci sono delle variabili nascoste passate alla funzione? –

2

Sì è possibile associare i metodi che scritti da qualche altra parte, ma si dovrebbe ignorare le parentesi:

function fHardCodedFunction(){ 
    //Do stuff 
} 

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

Cosa devo fare se ho bisogno passare la funzione hardcoded a un parametro? –

4

Prendendo in prestito da gli altri posti, è possibile parametrizzare il gestore di eventi come segue:

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


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


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

sto usando applicare qui perché nella funzione fHardCodedFunction mi piacerebbe il this proprietà per fare riferimento all'elemento MyButton. Nota anche che apply si aspetta un array per il secondo parametro, ed è per questo che ho racchiuso tra parentesi lo someValue.

Non devi farlo in questo modo e puoi dimenticarti del tutto di questa proprietà this se preferisci.

Problemi correlati