我已将函数绑定到表单提交按钮。我希望函数弹出一个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的预期行为,但我不确定如何绕过它......
答案 0 :(得分:4)
浏览器中的Javascript将按顺序执行,因此显然您启动iframe对话框的调用等待用户交互&amp;马上回来。我的猜测是,你用来弹出对话框的任何库都会有某种回调函数,它将根据用户操作执行。因此,您只需将new Ajax.Updater(....);
代码移动到回调函数中即可。
答案 1 :(得分:2)
基于我对javascript的基本知识,我认为这是正常的行为,只要对话框独立于您的代码(被调用的代码)运行。
你的对话框中是否有运行的javascript?因为我认为,如果有,你可以传递一个函数作为参数(将执行你想要的代码的回调),它将在返回时从对话框中调用。
答案 2 :(得分:1)
我会说你应该通过ajax调用第一个函数。 而且我认为你正在使用原型。
您在Ajax.Request和Ajax.Updater对象中有onComplete回调函数。 然后在onComplete函数中可以运行第二个函数。
喜欢
onComplete:function(){ 新的Ajax.Updater('dialogContainer',url,{ ........... } }); }
答案 3 :(得分:0)
如果目标Web客户端仅为Internet Explorer,则可以使用window.showModalDialog。它具有在父窗口中阻止javascript线程的良好属性。
showModalDialog已在Firefox中实现,但我不知道该功能是否在Firefox中阻止。