costom jqueryプラグイン内からユーザー定義のjavascript関数を呼び出し、それにパラメーターを渡す必要があります。次に例を示します。
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");
結果は未定義ですが、テスト関数からユーザー定義関数にデータパラメーターを渡すにはどうすればよいですか?前もって感謝します!
質問の更新:
asp.net mvc unobtrusive ajaxのように、ajaxリクエストを処理するjqueryプラグインを作成しています。たとえば、htmlタグattrbuteからajaxcallfack関数を取得します。
<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値は関数名です。Micrsoftjquery-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);
}
誰かが私を助けることができますか?どうもありがとうございます!