是否可以让JS函数的返回取决于用户操作

Is it possible to have the return of a JS function depend on user action?

本文关键字:返回 取决于 用户 操作 函数 JS 是否      更新时间:2023-09-26

是否可以让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 函数。