我有一个现有的Web应用程序,它使用window.showmodaldialog()
来显示某些表单,并根据返回值执行其他一些JavaScripts
例如:
var retVal = window.showmodaldialog('...');
if (retVal==XXX)
callXXX();
else
callYYY();
执行showModalDialog()
时,它会阻止主窗口上的JS执行,直到模态关闭。
我试图用jQuery对话框替换这些模态Windows,但问题是一旦$(...).dialog().open()
被执行,JavaScript执行就不会等待对话框关闭。
我知道有jQuery API可以让我配置一个回调函数,但这对我来说需要进行很多更改。无论如何,我可以暂停JavaScript执行,直到对话框关闭(我仍然必须能够从对话框执行脚本)。
答案 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函数这样做是因为它是由浏览器实现的。
您可以手动执行“等待”机制,并且您需要进行更改(正如您所说的那样,它们很多,但不应该是复杂的更改)。
这些是我现在想到的事情:
但如果您对插件持开放态度,我刚刚发现这个jQuery插件:BlockUI和some others可能对您有帮助。而且必须有一些其他插件已经实现了我在上面提到的内容。