Est-il possible de passer une fonction javascript avec des paramètres comme paramètre?
Exemple:
$(edit_link).click( changeViewMode( myvar ) );
Est-il possible de passer une fonction javascript avec des paramètres comme paramètre?
Exemple:
$(edit_link).click( changeViewMode( myvar ) );
Réponses:
Utilisez une "fermeture":
$(edit_link).click(function(){ return changeViewMode(myvar); });
Cela crée un wrapper de fonction temporaire anonyme qui connaît le paramètre et le transmet à l'implémentation de rappel réelle.
this.myFunction = this.myFunction.bind(this)dans votre constructorméthode. Mais, comme vous l'avez dit, lorsque vous devez lui transmettre différents contextes pour chacun, comme toutes les différentes lignes sur lesquelles vous cliquez pour ouvrir la page de détail de cette ligne, ce n'est pas évitable.
Utilisez Function.prototype.bind(). Citant MDN:
La
bind()méthode crée une nouvelle fonction qui, lorsqu'elle est appelée, a sonthismot-clé défini sur la valeur fournie, avec une séquence donnée d'arguments précédant tout fourni lorsque la nouvelle fonction est appelée.
Il est pris en charge par tous les principaux navigateurs, y compris IE9 +.
Votre code doit ressembler à ceci:
$(edit_link).click(changeViewMode.bind(null, myvar));
Note latérale: je suppose que vous êtes dans un contexte global, c'est- thisà- dire que la variable est window; sinon utilisez à la thisplace de null.
$.ajax(url).done(handler.bind(this, var1, var2));
Oui comme ça:
$(edit_link).click(function() { changeViewMode(myvar) });
Ou si vous utilisez es6, vous devriez pouvoir utiliser une fonction fléchée
$(edit_link).click(() => changeViewMode(myvar));
Tu peux le faire
var message = 'Hello World';
var callback = function(){
alert(this)
}.bind(message);
puis
function activate(callback){
callback && callback();
}
activate(callback);
Ou si votre rappel contient une logique plus flexible, vous pouvez passer un objet.
Voici un exemple suivant l'approche de Ferdinand Beyer:
function function1()
{
function2(function () { function3("parameter value"); });
}
function function2(functionToBindOnClick)
{
$(".myButton").click(functionToBindOnClick);
}
function function3(message) { alert(message); }
Dans cet exemple, la "valeur du paramètre" est transmise de function1 à function3 via function2 en utilisant une fonction wrap.