我有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
返回?
答案 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()
,一旦解析器遇到该行,它就会调用该函数。
您可以使用调用函数apply
或call
的两种Javascript方法之一。通过使用它,您的功能将不会在遇到它时立即执行。
尝试使用它并告诉我它是否无效。
答案 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);
}