Javascript JS函数的返回是否可能取决于用户操作?
JS函数的返回是否可能取决于用户操作 假设我有函数a和函数b 函数b打开一个对话框,其中有两个按钮,一个返回true,另一个返回false。我可以从a呼叫b并强制a等待b的返回,然后再继续它的操作吗 示例代码:Javascript JS函数的返回是否可能取决于用户操作?,javascript,jquery,Javascript,Jquery,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",
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;
}
}
});
}
我想这很像一个确认,但我想在它的基础上建立更多的是/否。有什么建议吗?没有,你不能停止函数的执行(当然,你可以使用带中断条件的无限while循环,但这是一种糟糕的做法)。但是,您可以将A拆分为两个函数并从函数B调用函数A的另一半。您甚至可以将返回函数传递给函数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
}
}
一个解决办法是
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
函数。我认为类似警报的对话框会停止执行,因此对这些对话框有效,但对于类似这样的DOM对话框无效。为什么不使用不同的按钮条件?因为你调用的函数不是创建它的吗?@Jleagle:不知道你的意思。这就是想法,不是吗?:)@ElliotBonneville您的代码是函数B(finishA)代码>在语法上无效。函数调用不包含函数
关键字,这就是我删除它的原因。噢,糟糕,错过了。谢谢你的帮助,西米维达斯。