2012-08-24 73 views
0

我无法找到关闭或重新加载下面的代码生成的弹出框的方法。我想要避免的是,如果用户没有手动关闭窗口,然后选择另一个“提示”,则新提示仅附加到现有文本。期望的结果可能是;问题关闭或重新加载“弹出”窗口

  1. 当焦点从窗口丢失时,窗口关闭,因此重置它。
  2. 当粘贴新提示时,我可以“刷新”窗口。

我做了大量的研究,并尝试了很多不同的方法无济于事。

请记住,我正在处理严格的政府环境,他们对安装第三方工具(如jQuery或类似软件)非常敏感,所以我真的坚持在这里使用基础知识,直到我可以说服他们。另外,对于MOST部分,部门中的大多数用户将使用IE8或更高版本,但(作为较低优先级),我宁愿开发一种对特定浏览器不具有限制性的解决方案。

也许有人可以提出一个更好的方式来做我正在做的事,或者是要求太多? ;-) 提前致谢。

function PromptTip(title, message) 
{ 
var HTMLTitle = "<p style='text-align:center'><b>" + title + "</b></p>" 
var HTMLMsg = "<p style='text-align:center'>" + message + "</p>" 
win = window.open("","Tip","width=320,height=210,scrollbars=no,resizable=no,titlebar=no"); 
win.moveTo(screen.width/2-160,screen.height/2-105) 
win.document.writeln("<html><head><title>Prompt Tip</title></head><body onfocusout='javascript:close()'>"); 
win.document.writeln(HTMLTitle); 
win.document.writeln(HTMLMsg); 
win.document.writeln("<p style='text-align:center'><a href='javascript:close()'>close</a></p></body></html>"); 
} 

回答

1

我强烈建议不要使用window.open和window.document.writeln。代替window.open,我会建议动态创建标记(或显示隐藏的标记片段),并使用绝对定位作为所有现代对话框/模式JS库。代替win.document.writeln我建议使用DOM创建使用document.createElement和插入使用Node.appendChild(或任何数量的DOM插入方法)或使用标记模板方法。这就是说,您可以简单地修改您的代码,以在每次单击工具提示时替换iframe正文的整个innerHTML。

例子:http://jsfiddle.net/ruJqj/

function PromptTip(title, message) { 
    var HTMLTitle = "<p style='text-align:center'><b>" + title + "</b></p>" 
    var HTMLMsg = "<p style='text-align:center'>" + message + "</p>" 
    win = window.open("", "Tip", "width=320,height=210,scrollbars=no,resizable=no,titlebar=no"); 
    win.moveTo(screen.width/2 - 160, screen.height/2 - 105) 

    win.document.body.innerHTML = HTMLTitle + HTMLMsg + "<p style='text-align:center'><a href='javascript:close()'>close</a></p>"; 
}​ 
+0

感谢提示亚当。我会研究你所建议的选项,虽然你所提出的编码当然会对我的代码进行流式处理,但我仍然存在关闭或刷新的更大问题......你所建议的编码选择(document.element等)是否会使你觉得更容易吗? – Labrug

+0

这工作得很好。只是建议对innerHTML进行更改的窍门。再次感谢。 – Labrug

+0

在这个变化之后,我只需要补充一点 - 回归顶部/焦点线......嘿他。 – Labrug

0

如果我understud你的问题可能这可以帮助你改变这一行:

win.document.writeln("<html><head><title>Prompt Tip</title></head><body onfocusout='javascript:close()'>"); 

对于这一个:

win.document.writeln("<html><head><title>Prompt Tip</title></head><body onBlur='javascript:close()'>"); 

您需要使用此事件:的onblur =” javascript:close()'

*我只是在IE 9中测试它并且工作正常

+0

对不起俄 - 不为我工作。窗口加载,但当我点击时,它保持打开状态。 – Labrug

+0

你是否赞成你的浏览器的“弹出保护”?如果你不允许它利用你的js代码,这是行不通的。 – Russo

+0

啊,好吧,我们可能有问题。还记得我说我们的技术领域有点紧张吗?很多我们的IE设置被锁定。但是,我没有问题加载弹出窗口。这工作正常... – Labrug