将选项对象中的回调函数传递给其他函数
Passing a callback function in options object to other function
我肯定做错了,现在我卡住了。
我想做的是将函数作为回调传递给另一个函数。
我的函数:
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"));
});
不幸的是,回调总是作为纯字符串而不是可调用函数传递。
我知道这听起来像是一个新手问题,但我坚持这个问题。请帮忙。
$(this).data("callback")
returns 一个字符串。您想要查找由 $(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")]
引用它们。
我肯定做错了,现在我卡住了。 我想做的是将函数作为回调传递给另一个函数。
我的函数:
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"));
});
不幸的是,回调总是作为纯字符串而不是可调用函数传递。 我知道这听起来像是一个新手问题,但我坚持这个问题。请帮忙。
$(this).data("callback")
returns 一个字符串。您想要查找由 $(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")]
引用它们。