Javascript JS函数的返回是否可能取决于用户操作?

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",

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;
        }
    }
});
}

我想这很像一个确认,但我想在它的基础上建立更多的是/否。有什么建议吗?

没有,你不能停止函数的执行(当然,你可以使用带中断条件的无限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)在语法上无效。函数调用不包含
函数
关键字,这就是我删除它的原因。噢,糟糕,错过了。谢谢你的帮助,西米维达斯。