从另一个函数javascript调用函数

时间:2012-07-04 06:32:35

标签: javascript jquery

我有2个功能。 First包含Jquery-UI对话框,并从Second函数调用。类似的东西:

function First() {
    $('div').dialog({
        buttons: {
            "Ok": function () { /* code */
            }
        }
    });
}

function Second() {
    First();
    /* rest of this function code is depend upon the "Ok button" 
       function code */
}

现在我的问题是,在调用函数First之后,脚本的执行不会等待dialog's Ok button press。我该怎么办,所以只有在按下Ok button之后,控件才会从函数First返回?

3 个答案:

答案 0 :(得分:2)

在调用Second后,将函数First移动到第二个函数(此处称为SecondOkHandler)。使用新参数(此回调函数)调用First,在'ok'调用函数First中调用:

function First(okCallback) {
    $('div').dialog({ 
        buttons : {
            "Ok" : okCallback
        }
    });
}

function Second () {
    First(SecondOkHandler);
}

function SecondOkHandler() {
    /* rest of this function code is depend upon the "Ok button" function code */
}

另见this example

=== UPDATE ===

为了使其更复杂,这里a link to an example有更多回调。

答案 1 :(得分:1)

这是因为你给出了一个括号First(),一旦解析器遇到该行,它就会调用该函数。

您可以使用调用函数applycall的两种Javascript方法之一。通过使用它,您的功能将不会在遇到它时立即执行。

查看此参考http://odetocode.com/blogs/scott/archive/2007/07/05/function-apply-and-function-call-in-javascript.aspx

尝试使用它并告诉我它是否无效。

答案 2 :(得分:1)

    function First(waitTillOk) {
        $('div').dialog({
            buttons: {
                "Ok": function () { 
                      /* code */
                      if(typeof waitTillOk == "function"){
                        waitTillOk();
                      }
                }
            }
        });
    }

    function Second() {
        var waitTillOk = function(){
         /* rest of this function code is depend upon the "Ok button" 
           function code */
     }
     First(waitTilOk);
    }