Мне нужно вызвать определяемую пользователем функцию javascript из моего плагина costom jquery и передать ей параметры, например:
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");
Результат не определен, как я могу передать параметр данных из тестовой функции в пользовательскую функцию? заранее спасибо!
обновление вопроса:
Я пишу плагин jquery для обработки запроса ajax, очень похожего на ненавязчивый ajax asp.net mvc, я получаю функцию callfack ajax из атрибута тега html, например:
<div data-ajax-success="function(data,status,xhr){alert(data);}"....
значение атрибута data-ajax-success определяется пользователем, оно может быть в следующих форматах:
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"
Мне нужно проанализировать это значение атрибута как функцию javascript и передать параметры обратного вызова jquery ajax этой функции, где значением data-ajax-success является имя функции, я мог бы правильно вызвать его, используя следующий метод, определенный в 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);
}
но когда data-ajax-success является телом функции, я не мог передать ему параметр, вот мой пример кода, который обрабатывает обратный вызов 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);
}
кто-нибудь может мне помочь? большое спасибо!
"function(data){alert(data);}"
? - person Tomalak   schedule 19.09.2012eval
) - person keyser   schedule 19.09.2012