是否有可能让JS函数的返回依赖于用户操作?

时间:2012-05-08 15:00:37

标签: 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",
    buttons:{
        "Yes": function(){
            //do some stuff
            $(this).dialog("close");
            return true;
        },
        Cancel: function(){
            //do some stuff
            $(this).dialog("close");
            return false;
        }
    }
});
}

我想这很像一个确认,但我想建立的不仅仅是肯定/否。有什么建议吗?

2 个答案:

答案 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函数。