È possibile passare una funzione JavaScript con parametri come parametro?
Esempio:
$(edit_link).click( changeViewMode( myvar ) );
È possibile passare una funzione JavaScript con parametri come parametro?
Esempio:
$(edit_link).click( changeViewMode( myvar ) );
Risposte:
Usa una "chiusura":
$(edit_link).click(function(){ return changeViewMode(myvar); });
Ciò crea un wrapper di funzioni temporanee anonime che conosce il parametro e lo passa all'implementazione di callback effettiva.
this.myFunction = this.myFunction.bind(this)nel tuo constructormetodo. Ma, come hai detto, quando devi passarci contesti diversi per ognuno, come tutte le diverse righe su cui fai clic per aprire la pagina dei dettagli di quella riga, non è evitabile.
Usa Function.prototype.bind(). Citando MDN:
Il
bind()metodo crea una nuova funzione che, quando viene chiamata, ha lathisparola chiave impostata sul valore fornito, con una determinata sequenza di argomenti che precede quella fornita quando viene chiamata la nuova funzione.
È supportato da tutti i principali browser, incluso IE9 +.
Il tuo codice dovrebbe apparire così:
$(edit_link).click(changeViewMode.bind(null, myvar));
Nota a margine: suppongo che tu sia in un contesto globale, cioè che la thisvariabile sia window; altrimenti usa thisinvece di null.
$.ajax(url).done(handler.bind(this, var1, var2));
Sì come questo:
$(edit_link).click(function() { changeViewMode(myvar) });
O se stai usando es6 dovresti essere in grado di usare una funzione freccia
$(edit_link).click(() => changeViewMode(myvar));
Puoi farlo
var message = 'Hello World';
var callback = function(){
alert(this)
}.bind(message);
e poi
function activate(callback){
callback && callback();
}
activate(callback);
Oppure, se il callback contiene una logica più flessibile, è possibile passare l'oggetto.
Questo è un esempio che segue l'approccio di Ferdinand Beyer:
function function1()
{
function2(function () { function3("parameter value"); });
}
function function2(functionToBindOnClick)
{
$(".myButton").click(functionToBindOnClick);
}
function function3(message) { alert(message); }
In questo esempio il "valore del parametro" viene passato dalla funzione1 alla funzione3 attraverso la funzione2 usando una funzione a capo automatico.