0

我有 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

4

3 回答 3

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 */
}

另请参阅此示例

=== 更新 ===

为了使它更复杂,这里有一个带有更多回调的示例的链接。

于 2012-07-04T06:38:44.327 回答
1

这是因为您已经给出了一个括号First() ,这将在解析器遇到该行时立即调用该函数。

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

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

尝试使用它,如果它不起作用,请告诉我。

于 2012-07-04T06:36:58.860 回答
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);
    }
于 2012-07-04T07:13:52.280 回答