我将功能绑定到表单提交按钮。我希望该功能弹出一个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中阻止。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top