J'ai besoin d'appeler une fonction javascript définie par l'utilisateur à partir de mon plugin costom jquery et de lui passer des paramètres, par exemple :
function test(data)
{
var myfunc="function(data){alert(data);}"; //this is user defined function I retrieved from html tag attribute
var fn=new Function("("+myfunc+")();");
fn.apply(this,arguments);
return fn;
}
test("hello");
Le résultat est indéfini, comment puis-je passer le paramètre de données de la fonction de test à la fonction définie par l'utilisateur ? merci d'avance !
mise à jour des questions :
J'écris un plugin jquery pour gérer les requêtes ajax, un peu comme asp.net mvc unobtrusive ajax, je récupère la fonction callfack ajax à partir de l'attrbute du tag html, par exemple :
<div data-ajax-success="function(data,status,xhr){alert(data);}"....
la valeur de l'attribut data-ajax-success est une fonction définie par l'utilisateur, elle peut avoir les formats suivants :
data-ajax-success="function(data,status,xhr){alert(data);}"
data-ajax-success="function(data){alert(data);}"
data-ajax-success="function(){alert('hello');}"
data-ajax-success="functionName"
J'ai besoin d'analyser la valeur de cet attribut comme une fonction javascript et de passer les paramètres de rappel jquery ajax à cette fonction, où data-ajax-success est le nom de la fonction, je pourrais l'appeler correctement en utilisant la méthode suivante définie dans Micrsoft jquery-unobtrusive-ajax.js :
function getFunction(code, argNames) {
var fn = window, parts = (code || "").split(".");
while (fn && parts.length) {
fn = fn[parts.shift()];
}
if (typeof (fn) === "function") {
return fn;
}
argNames.push(code);
return Function.constructor.apply(null, argNames);
}
mais lorsque data-ajax-success est le corps de la fonction, je ne peux pas lui passer de paramètre, voici mon exemple de code qui gère le callback ajax :
loadData: function (index, options) {
complete: function (xhr,status) {
$(context.loading).hide(context.loadingDuration);
getFunction(context.onComplete, ["xhr", "status"]).apply(this, arguments);
},
success:function (data, status, xhr) {
$(context.updateTarget).html(data);
getFunction(context.onSuccess, ["data", "status", "xhr"]).apply(this, arguments);
},
error: getFunction(context.onFailure, ["xhr", "status", "error"])
});
$.ajax(options);
}
quelqu'un peut m'aider ? merci beaucoup !