我使用了apprise函数,yes表示返回true,No表示返回false 我使用它来使用onclientclick方法验证控件。 函数嵌套时,返回参数似乎没有返回 任何人都知道如何正确地返回测试(e)方法
function test(e) {
apprise('Are you sure you want to add a 12 Month Donation?', { 'verify': true },
function (r) {
if (r) {
// user clicked 'Yes'
apprise("Donation Added");
}
else {
// user clicked 'No'
return false;
}
});
}
我已经将java脚本编辑为Thomas推荐的内容但是通过验证仍然似乎无法工作,尽管上面的JS函数返回了正确的参数
这是编辑过的JS和asp部分。似乎永远不会在新代码中达到onclick方法,但返回参数是正确的
OnClientClick ="if (!test()) {return false;}"
onclick="btn12MonthDonate"
function test() {
function donationAdded() {
console.log("yes");
return true;
};
function donationNotAdded() {
console.log("no");
return false;
};
apprise('Are you sure you want to add a 12 Month Donation?', { 'verify': true },
function (r) {
if (r) {
// user clicked 'Yes'
apprise("Donation Added");
donationAdded();
}
else {
// user clicked 'No'
donationNotAdded();
}
});
}
答案 0 :(得分:0)
其实我觉得,你不应该回来。您添加了一个return语句的函数是一个回调函数。回调机制是返回机制的替代方法。而不是返回你可以调用回调函数内的另一个函数来完成任务......
功能测试(e){
apprise('Are you sure you want to add a 12 Month Donation?', { 'verify': true },
function (r) {
if (r) {
// user clicked 'Yes'
apprise("Donation Added");
}
else {
// user clicked 'No'
toBeCalledIfFalse(false);
}
}
)};
function toBeCalledIfFalse(){
//code to handle false
}
答案 1 :(得分:0)
正如plbsam写的那样,apprise
- 函数有一个参数,它是一个callback
(即一个作为参数传递的函数,在某个时间点被称为)。
典型的控制流程是:
function(){
Step1 ...
Step2 ...
...
Step n
return;
};
这是同步/线性控制流程。
另一方面,callback
有助于异步控制流程:
function(callback){
Step1 ...
Step2 ...
...
callback();
...
Step n
return;
};
这适用于事件驱动的 - 编程:当用户做出选择并且结果已知时,弹出一个对话框和完全时刻,一个函数叫做。某些时间点,调用回调。
因此,如果您希望控制流返回函数,请定义部件,它应在函数中返回:
function(){
var goOnHere=function(result){
};
Step1 ...
Step2 ...
callFunction(goOnHere);
Step n
return;
};
function(callback){
Step1 ...
Step2 ...
...
callback(result);
};
所以你的代码可以转换为:
function test(e) {
function donationAdded(){
console.log("yes");
};
function donationNotAdded(){
console.log("no");
};
apprise('Are you sure you want to add a 12 Month Donation?', { 'verify': true },
function (r) {
if (r) {
// user clicked 'Yes'
apprise("Donation Added");
donationAdded();
}
else {
// user clicked 'No'
donationNotAdded();
}
});
}
为清楚起见,我解释了进一步的控制流程:
function(){
var goOnHere=function(result){
return value; // returns to the calling point
};
Step1 ...
Step2 ...
callFunction(goOnHere); //pass flow to call function, which itself calls goOnHere
Step 3
return;
};
如果您看一下流程,它会自上而下:
callback
goOnHere
goOnHere
返回callFunction
是一个纯粹的调用,所以每个返回值都被抛弃return
从函数没有直接的方法来返回一个值。这是一个单一的。
可能的出路是 MVC -Style编程:
您将“模型”传递给内部函数,该函数本身已将callbacks
实现为“事件”。因此,如果您知道“结果”,则将模型设置为适当的状态。之后,模型会触发change
- 事件,所有订阅者都可以对此做出反应。
细节超出了这个主题。
对于事件驱动的 - 编程,您需要一种不同的心态。首先,我很难理解这些概念。