Javascript函数执行时无需等待上面行中的函数返回?

时间:2010-01-08 10:17:44

标签: javascript javascript-events prototypejs

我已将函数绑定到表单提交按钮。我希望函数弹出一个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的预期行为,但我不确定如何绕过它......

4 个答案:

答案 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中阻止。