2012-07-07 100 views
-1

我明白這個問題已經被問了很多次,但是我找不到解決我的問題,儘管搜索谷歌和stackoverflow和應用各種嘗試。Javascript setTimeout不起作用

這裏是我的JS:

function Redirect(id) 
    { 
     window.open("go.php?id=" + id, "_blank"); 
    } 

    function LinkPop(id) 
    {   
     xmlObj = new XMLHttpRequest(); 
     xmlObj.open("GET", "pop.php?id=" + id, false); 
     xmlObj.send(); 

     document.getElementById(id).style.fontSize = xmlObj.responseText + "px"; 
     document.getElementById(id).title = "Clicked " + (xmlObj.responseText - 18) + " times"; 

     window.setTimeout(function(){Redirect(id);}, 2000); 
    } 

一切從2秒延遲,新頁面打開工作分開。正如你所看到的,我嘗試了一個沒有幫助的閉包。我希望我已經錯過了非常基本的東西...

感謝您的任何幫助。

+0

對我來說沒問題。究竟發生了什麼?錯誤? 「重定向」功能是否真的受到打擊?另外,在JS中,最好將大括號放在同一行,並且不要大寫函數名稱,除非您計劃實例化,而不是僅僅調用它們。 – Utkanos 2012-07-07 10:19:02

+0

將'xmlObj.responseText'轉換爲整數。確保存在帶'id'的元素('document.getElementById(id)'不能爲空)。 – 2012-07-07 10:26:48

+0

我把大括號放在同一行上,我習慣用PHP和C編程一個特定的方式.Redirect()函數似乎沒有被調用。我使用alert()調用來測試它。 – Lee 2012-07-07 10:27:02

回答

1

您正試圖打開彈出式窗口。所有現代瀏覽器都有彈出式窗口攔截器,這會阻止您在限制的情況下執行此操作,原因是過去濫用此功能。

特別是,瀏覽器通常只允許彈出窗口直接響應與網頁的交互(例如點擊)。超時事件不是一種交互,即使它是爲了響應較早的交互而觸發的,所以您將不被允許打開該窗口進行默認設置。

您可以立即打開彈出窗口(您可以嘗試打開它作爲彈出式窗口並稍後將其聚焦到前端,但這並不總是可靠的)。或者,也許更好,忘記彈出窗口,只是在當前頁面上做一個簡單的重定向。