JavaScript函数执行,而无需等待上述行中的函数返回?
-
19-09-2019 - |
题
我将功能绑定到表单提交按钮。我希望该功能弹出一个iframe对话框并等待用户交互,然后提交表单(通过AJAX帖子)。
但是我看到的行为是对话框弹出,但是即使对话框调用尚未返回,功能仍在执行并执行Ajax帖子。我需要某种方法来停止代码执行,直到对话框函数返回。
我有类似的东西:
submitForm: function () {
<call a function that pops up a dialog, doesn't return until user interacts>
new Ajax.Updater('dialogContainer', url, {
...........
}
});
return false;
}
我认为这是JavaScript的预期行为,但不确定如何解决。
解决方案
浏览器中的JavaScript将依次执行,因此显然您要启动iframe对话框的呼叫 不 等待用户交互并立即返回。我的猜测是,无论您使用的任何库弹出您的对话框都将具有某种回调函数,它将基于用户操作执行。因此,您只需要移动您的 new Ajax.Updater(....);
代码为回调函数。
其他提示
基于我对JavaScript的基本知识,我认为只要对话框独立于您的代码运行(所谓的代码),这就是正常行为。
您的对话框中是否有任何JavaScript运行?因为我认为,如果有的话,您可以将函数作为参数(可以执行您想要的代码的回调)传递,该函数将在对话框返回时从对话框中调用。
我要说的是,您也应该通过Ajax调用第一个功能。我认为您正在使用原型。
您在ajax.request和ajax.updater对象中具有oncomplete回调函数。然后,在oncoplete函数中可以运行第二个函数。
喜欢
oncomplete:function(){new Ajax.updater('dialogContainer',url,{.................................................................................................................................................................................................. }
如果您的目标Web客户端仅是Internet Explorer,则可以使用window.showmodalialog。它具有在父窗口中阻止JavaScript线程的不错属性。
Showmodaldialog已在Firefox中实施,但我不知道该功能是否在Firefox中阻止。