2010-01-08 85 views
1

我已经绑定了一个表单提交按钮的功能。我想要这个函数弹出一个iframe对话框并等待用户交互,然后提交表单(通过ajax文章)。Javascript函数执行时无需等待上述行中的函数返回?

但我看到的行为是对话框弹出,但该函数继续执行并执行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的预期行为,但我不知道如何解决它...在此基础上我有一个基本的知识

回答

3

JavaScript在浏览器中将按顺序执行,所以显然你的调用启动iframe对话框不会等待用户交互&立即返回。我的猜测是,无论你用什么库来弹出你的对话框,都会有某种回调函数,它会根据用户操作来执行。所以你只需要将你的new Ajax.Updater(....);代码转换成回调函数。

+0

谢谢你!我为即时返回的对话框函数而烦恼,但对话框函数中的Facebook API调用确实有一个回调,它完美的工作 – ambertch 2010-01-08 22:39:18

2

JavaScript我认为这是正常的行为,只要对话框独立于代码运行(代码称为它)。

您的对话框中是否有任何JavaScript运行?因为我认为,如果有的话,你可以传递一个函数作为参数(回调函数将执行你想要的代码),当它返回时,将从对话框中调用它。

1

我会说你应该通过ajax调用第一个函数。 我认为你使用的是原型。

您在Ajax.Request和Ajax.Updater对象中有onComplete回调函数。 然后在onComplete函数中可以运行第二个函数。

的onComplete:函数(){ 新的Ajax.Updater( 'dialogContainer',URL,{ ........... } }); }

0

如果您的目标网页客户端仅限Internet Explorer,则可以使用window.showModalDialog。它具有在父窗口中阻止JavaScript线程的好处。

showModalDialog已在Firefox中实现,但我不知道该功能是否在Firefox中被阻止。