2012-08-24 69 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