我有这个main函数,它接受1个字符串和2个回调函数作为参数。以下是代码。
function confirmYesNo(confirmMessage, confirmCallback, cancelCallback) {
$("#yes-button").click(function () {
confirmCallback(); //How do I pass confirmCallback arguments
});
...
}
以下是调用函数的方法
function confirmYesNoTest() {
var confirmContent = "Some Message"
var id = "1";
confirmYesNo(confirmContent,
function (id) { alert(id); }, //alerts undefined
function () { alert("Cancel Clicked"); });
}
问题是,当confirmCallback执行时,上面的id变量(设置为1)变为“undefined”。似乎与范围相关的东西,但我无法使其工作。
答案 0 :(得分:2)
回调不应该带任何参数。你可以在一个闭包中捕获id:
function confirmYesNoTest() {
var confirmContent = "Some Message"
var id = "1";
confirmYesNo(
confirmContent,
function () { alert(id); },
function () { alert("Cancel Clicked"); }
);
}
或者,如果您不想使用闭包,可以将id作为参数传递给回调:
function confirmYesNo(confirmMessage, id, confirmCallback, cancelCallback) {
$("#yes-button").click(function () {
confirmCallback(id);
});
...
}
并在调用时:
function confirmYesNoTest() {
var confirmContent = "Some Message"
var id = "1";
confirmYesNo(
confirmContent,
id,
function (id) { alert(id); },
function () { alert("Cancel Clicked"); }
);
}
现在您可以将回调用作命名函数:
var confirmCallback = function(id) {
alert(id);
};
然后:
function confirmYesNoTest() {
var confirmContent = "Some Message"
var id = "1";
confirmYesNo(
confirmContent,
id,
confirmCallback,
function () { alert("Cancel Clicked"); }
);
}