是否可以让JS函数的返回依赖于用户操作?
所以,假设我有函数a和函数b。
函数b打开一个带有两个按钮的对话框,一个返回true,另一个返回false。我可以从a中调用b并强制a等待b的返回,然后再继续操作吗?
示例代码:
function a(){
if(b()){
do x
}else{
do y
}
}
function b(){
$("#anElement").dialog({
title: "This is a Dialog",
buttons:{
"Yes": function(){
//do some stuff
$(this).dialog("close");
return true;
},
Cancel: function(){
//do some stuff
$(this).dialog("close");
return false;
}
}
});
}
我想这很像一个确认,但我想建立的不仅仅是肯定/否。有什么建议吗?
答案 0 :(得分:2)
不,你不能暂停一个函数的执行(好吧,你可以使用一个具有中断条件的无限while循环,但这是可怕的做法)。但是,您可以将A拆分为两个函数,并从函数B中调用函数A的另一半。您甚至可以将函数B传递给函数B并调用它,传入用户操作的值。
示例:强>
function A() {
// do stuff
B(finishA);
}
function B(callback) {
if(someCondition) {
callback(true);
} else {
callback(false);
}
}
function finishA(userInput) {
if(userInput) {
// do something if the user clicked okay
} else {
// do something if the user clicked cancel
}
}
答案 1 :(得分:1)
一个解决方案是......
function a () {
b( function () {
// do x
}, function () {
// do y
});
}
function b ( fn1, fn2 ) {
$( "#anElement" ).dialog({
title: "This is a Dialog",
buttons: {
"Yes": function () {
//do some stuff
$( this ).dialog( "close" );
fn1();
},
"Cancel": function () {
//do some stuff
$( this ).dialog( "close" );
fn2();
}
}
});
}
因此,您将两个函数传递给b
。如果激活“是”按钮,则调用第一个,如果激活“取消”按钮,则调用第二个函数。
此模式使您可以直接在a
函数内定义行为,而不必将其附加到b
函数。