4

是否可以让 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;
        }
    }
});
}

我想这很像一个确认,但我想在它之上构建不仅仅是是/否。有什么建议么?

4

2 回答 2

2

不,您不能停止函数的执行(好吧,您可以使用带有中断条件的无限 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
    }
}
于 2012-05-08T15:03:31.470 回答
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函数中。

于 2012-05-08T15:09:08.047 回答