我肯定做错了,现在我被卡住了。 我想要做的是将函数作为回调函数传递给另一个函数。
我的功能:
function myfunc(options, callback) {
var settings = {
opt1 = "something",
url = "someURL"
}
if( options ){
$.extend( settings, options );
}
$.ajax({
url: settings.url,
success: function(data) {
callback();
}
});
}
提供参数的HTML:
<input type="button" id="btn" value="Click me" data-callback="callbackFN" />
点击事件:
$("#btn").click(function() {
myfunc({
opt1: "text",
url: "theURL"
}, $(this).data("callback"));
});
不幸的是,回调总是作为普通字符串传递,而不是作为可调用函数传递。 我知道这听起来像一个新手问题,但我坚持这个。请帮忙。
答案 0 :(得分:3)
$(this).data("callback")
返回一个字符串。您希望找到由$(this).data("callback")
返回的字符串标识的实际函数。
如果该功能是全局的,您可以window[$(this).data("callback")]
来引用window.callbackFN
。
如果函数不是全局的(即,它是函数的本地函数),您可以使用eval
来引用它,但这可能会在代码中打开大的安全问题。例如,请考虑data-callback="alert(document.cookie)"
。
如果你想避免全局回调和eval
,另一种选择可能是将你的回调放在一个对象而不是全局范围内:
var myCallbacks = {
callbackFN: function() { ... },
otherCallback: function() { ... }
}
请参阅myCallbacks[$(this).data("callback")]
。