打开的窗户不会关闭

时间:2017-07-08 20:11:28

标签: javascript function onclick window

我有一个点击打开的窗口。

function PopupManager() {
this.name = "_popupmanager_";
this.windows = {};
};

PopupManager.prototype.open = function(url, option, size, name) {
var url = "http://google.com" 
var option = "null, status=no, toolbar=no, menubar=no, titlebar=no, 
location=no, scrollbars=no, resizable=no"
var size = 'height=200, width = 814'
this.windows[name] = window.open(url, option, size, name);
this.windows[name].focus();
};


PopupManager.prototype.closeAll = function() {
for (name in this.windows) {
  this.closeWindow(name);
}
 }


 PopupManager.prototype.closeWindow = function(name) {
if (this.windows[name]) {
    if (!this.windows[name].closed) {
        this.windows[name].opener.name="indexpage";
        this.windows[name].close();
    }
    delete this.windows[name];
 }
 };

//初始化

 document.getElementById("popupManager").onclick = function (e) { 
 e.preventDefault();    
 var popupManager = new PopupManager();
 popupManager.open('http://www.google.com', 'google');

} 

我认为这应该关闭同一个窗口。

 document.getElementById("closeIt").onclick = function (e) { 
 e.preventDefault();
 var popupManager = new PopupManager();
 popupManager.closeAll();
 popupManger.closeWindow();

 }

没有控制台错误&什么都没发生。刚刚结束了。

我试图使用相同的< a>标签打开&使用if else语句关闭窗口,但我无法弄明白。所以现在我试图使用两个不同的< a>标签,(是的,我知道这是愚蠢的)一个打开&一个要关闭,但我甚至不能这样做。

我甚至无法弄清楚我在这里做错了什么。

任何帮助将不胜感激。叹息...

1 个答案:

答案 0 :(得分:0)

只需在popupManager外部定义一个包含窗口的变量,以便稍后访问它们以便关闭。

你可以将它包装成IIFE来创建一个闭包。



var windows = {};

function PopupManager() {
  this.name = "_popupmanager_";
};

PopupManager.prototype.open = function(url, option, size, name) {
  var url = "http://google.com"
  var option = "null, status=no, toolbar=no, menubar=no, titlebar=no, location = no, scrollbars = no, resizable = no ";
  var size = 'height=200, width = 814'
  windows[name] = window.open(url, option, size, name);
  windows[name].focus();
};


PopupManager.prototype.closeAll = function() {
  for (name in windows) {
    this.closeWindow(name);
  }
}

PopupManager.prototype.closeWindow = function(name) {
  if (windows[name]) {
    if (!windows[name].closed) {
      windows[name].opener.name = "indexpage";
      windows[name].close();
    }
    delete windows[name];
  }
};

document.getElementById("popupManager").onclick = function(e) {
  e.preventDefault();
  var popupManager = new PopupManager();
  popupManager.open('http://www.google.com', 'google');

}

document.getElementById("closeIt").onclick = function(e) {
  e.preventDefault();
  var popupManager = new PopupManager();
  popupManager.closeAll();
  popupManager.closeWindow();

}

<button id="popupManager">Open</button>
<br />
<button id="closeIt">Close</button>
&#13;
&#13;
&#13;

另一种选择是使用

PopupManager.prototype.windows = {};

保持可以跨实例访问相同的变量。