Javascript 确定布尔值何时从true更改为false
我有一个有打印按钮的网页。只要按下打印按钮,我就有一个功能Javascript 确定布尔值何时从true更改为false,javascript,html,Javascript,Html,我有一个有打印按钮的网页。只要按下打印按钮,我就有一个功能 function pWindowNeeded() { if (newPWindowNeeded == 'Y') { return true; } return false; } 然后我有另一个函数,它说如果这是真的,那么打开一个包含要打印的PDF的新窗口,并将newpwindowneded更改为“N” 这一切都很好 另外,当用户现在单击打印窗口时,我会运行此函数 function alertWi
function pWindowNeeded() {
if (newPWindowNeeded == 'Y') {
return true;
}
return false;
}
然后我有另一个函数,它说如果这是真的,那么打开一个包含要打印的PDF的新窗口,并将newpwindowneded更改为“N”
这一切都很好
另外,当用户现在单击打印窗口时,我会运行此函数
function alertWindow()
{
var w = window.open('','',' width = 200, height = 200, top = 250 , left = 500 ');
w.document.write("Please Wait<br> Creating Document(s).<br><img src='loadingimage.gif'>");
w.focus();
setTimeout(function() {w.close();}, 5000);
}
函数alertWindow()
{
var w=窗开(“”,,“宽=200,高=200,顶=250,左=500”);
w、 文档。写入(“请等待
创建文档)。
”;
w、 焦点();
setTimeout(函数(){w.close();},5000);
}
这也可以正常工作,创建窗口,然后在5秒钟后自动关闭
目前这很好,但我实际需要的是评估pwindowneded何时返回false,何时返回false,我需要它自动关闭窗口
当pWindowNeeded从true变为false时,最有效的评估方法是什么
谢谢效率最低、最简单的方法是使用setTimeout轮询值
function callbackWhenWindowNotNeeded(cb) {
if (!pWindowNeeded()) {
cb();
} else {
// The lower the number, the faster the feedback, but the more
// you hog the system
setTimeout(callbackWhenWindowNotNeeded, 100);
}
}
function alertWindow() {
var w = window.open('','',' width = 200, height = 200, top = 250 , left = 500 ');
w.document.write("Please Wait<br> Creating Document(s).<br><img src='loadingimage.gif'>");
w.focus();
callBackWhenWindowNotNeeded(function() {
w.close();
});
}
不需要时的函数回调(cb){
如果(!pwindowneded()){
cb();
}否则{
//数字越小,反馈越快,但反馈越多
//你控制了这个系统
设置超时(当不需要时回调,100);
}
}
函数alertWindow(){
var w=窗开(“”,,“宽=200,高=200,顶=250,左=500”);
w、 文档。写入(“请等待
创建文档)。
”;
w、 焦点();
不需要时回调(函数(){
w、 close();
});
}
理想情况下,您应该使用某种消息总线来防止轮询。这里有一个穷人的公共汽车的例子
var MessageBus = (function(){
var listeners = [];
return {
subscribe: function(cb) {
listeners.push(cb);
},
fire: function(message) {
listeners.forEach(function(listener){
listener.call(window);
});
}
})();
function alertWindow() {
var w = window.open('','',' width = 200, height = 200, top = 250 , left = 500 ');
w.document.write("Please Wait<br> Creating Document(s).<br><img src='loadingimage.gif'>");
w.focus();
MessageBus.subscribe(function(message, event) {
if (message == 'WINDOW_NOT_NEEDED') {
w.close();
}
});
}
// Then wherever you set your newPWindowNeeded
newPWindowNeeded = 'N';
MessageBus.fire('WINDOW_NOT_NEEDED');
var MessageBus=(函数(){
var侦听器=[];
返回{
订阅:功能(cb){
推送(cb);
},
火灾:功能(信息){
forEach(函数(侦听器){
调用(窗口);
});
}
})();
函数alertWindow(){
var w=窗开(“”,,“宽=200,高=200,顶=250,左=500”);
w、 文档。写入(“请等待
创建文档)。
”;
w、 焦点();
订阅(函数(消息、事件){
如果(消息==“不需要窗口”){
w、 close();
}
});
}
//那么无论你把你的新电脑放在哪里
newpwindowneded='N';
MessageBus.fire(“不需要窗口”);
你不能再检查一次newpwindowneded
或者设置另一个标志吗?最好的方法是在使用消息总线设置pwindowneded
时触发一个事件。糟糕的方法是让setTimeout
不断运行,出于好奇,检查pwindowneded
的值,看看代码发生了什么变化newpwindowneded
toY
?触发窗口打开似乎是一种奇怪的方式。@Katana314可能有很多东西,页面上的复选框?由于(或缺少)而超时用户交互…@JuanMendes不需要设置间隔吗?@JOO如果解决了您的问题,请接受答案。尝试MessageBus
方法,使用类似于我将尝试使用MessageBus的内容。我有一个Try catch,用于检查是否启用了弹出窗口阻止程序,并且出于某种原因,它正在命中该catch。我会把结果告诉你的