我有一个带有按钮的网页,可打开另一个窗口。
单击该按钮并打开新页面时,我禁用该按钮(因为只需打开一个页面,单击该按钮)。
我使用window.open()
而非windows.showModalDialog()
,因为用户应该同时使用这两个页面。
当第二页关闭时,我必须重新启用第一页中的按钮。
我尝试过这样的事情:
var win = window.open("SecondPage.htm");
// disable button
while (!win.closed) {
setTimeout('', 2000);
}
// re-enable button
但是使用while
循环会减慢浏览器的速度,因此实际上无法在第一页上工作...
我的问题有更好的解决方案吗?
答案 0 :(得分:0)
setTimeout('', 2000)
不是sleep()
你的while循环不断转动,确实会消耗所有的CPU,从而减慢了浏览器的速度。
更好:
var win = window.open("SecondPage.htm");
// disable button
setTimeout('enableButtonIfWindowClosed', 2000);
function enableButtonIfWindowClosed {
if (windowClosed()) {
enableButton();
}
else {
setTimeout('enableButtonIfWindowClosed', 2000);
//function recalls the function itself
}
}
答案 1 :(得分:0)
我猜您可以将事件绑定到unload
或beforeunload
事件:
win.onunload = function() {
// re-enable button
};
但如果用户在窗口中加载了不同的页面,也会调用此方法,因此您仍然需要检查事件处理程序中的win.closed
。
答案 2 :(得分:0)
如果你通过javascript处理用户将刷新页面1.这将失败。所以当使用点击第2页链接使ajax调用保存在服务器按钮禁用和按钮属性按钮
//page 1 script
var win = null;
$("#link1").click(function(){
$("#button_id").attr("disabled", "disabled");
//ajax to server and save like button1 is disabled
win = window.open("URL2");
win.onunload = function () {
//enable the button 1
}
});
//In the page 2 script
window.unload = function() {
//ajax to button is enabled
}
答案 3 :(得分:0)
此Konerak的代码无法解决CPU和内存浪费问题。使用setTimeout
时,您也必须使用clearTimeout()
,否则只要top.window打开,计时器就会停止。修复这样的代码:
var win = window.open("SecondPage.htm");
var delay;
// disable button
delay=setTimeout('enableButtonIfWindowClosed', 2000);
function enableButtonIfWindowClosed {
if(delay) clearTimeout('delay');
if (windowClosed()) {
enableButton();
}
else {
setTimeout('enableButtonIfWindowClosed', 2000);
//function recalls the function itself
}
}
更复杂:
var win = window.open("SecondPage.htm");
var delay;
// disable button
delay=setInterval('enableButtonIfWindowClosed', 2000);
function enableButtonIfWindowClosed {
if (windowClosed()) {
if(delay) clearInterval('delay');
enableButton();
}
}
没有CPU消耗且没有内存浪费。