使用jQuery创建JS执行阻止对话框

时间:2010-08-21 13:16:51

标签: javascript jquery

我有一个现有的Web应用程序,它使用window.showmodaldialog()来显示某些表单,并根据返回值执行其他一些JavaScripts

例如:

var retVal = window.showmodaldialog('...');

if (retVal==XXX)
  callXXX();
else
  callYYY();

执行showModalDialog()时,它会阻止主窗口上的JS执行,直到模态关闭。

我试图用jQuery对话框替换这些模态Windows,但问题是一旦$(...).dialog().open()被执行,JavaScript执行就不会等待对话框关闭。

我知道有jQuery API可以让我配置一个回调函数,但这对我来说需要进行很多更改。无论如何,我可以暂停JavaScript执行,直到对话框关闭(我仍然必须能够从对话框执行脚本)。

2 个答案:

答案 0 :(得分:3)

不幸的是,没有。您将需要使用某种回调函数。 JavaScript中的“阻塞”是一个坏主意,因为只有一个执行线程,JavaScript使用事件驱动模型。

你可以做这样的事情来“等待”返回值,但这根本不会“阻止”其他执行:

var myReturn, 
myInterval = setInterval(function () {
  if (myReturn != undefined) {
    clearInterval(myInterval);
    // Rest of processing code here.
  }
}, 50);

$('myContainer').dialog(close: function () {
  myReturn = 'Dialog Closed';
}).open();

应该避免尝试“阻止”或“暂停”JavaScript执行 - 语言根本就不是为此而设计的。

答案 1 :(得分:1)

我担心没有办法“暂停”javascript执行,直到你想要本地.. showModalDialog函数这样做是因为它是由浏览器实现的。

您可以手动执行“等待”机制,并且您需要进行更改(正如您所说的那样,它们很多,但不应该是复杂的更改)。

这些是我现在想到的事情:

  • 利用回调(对我而言,目前为止最好)
  • 使用setTimeout和您自己的机制,g.d.d.c answered
  • 使用一些用户线程javascript库。

但如果您对插件持开放态度,我刚刚发现这个jQuery插件:BlockUIsome others可能对您有帮助。而且必须有一些其他插件已经实现了我在上面提到的内容。