2012-07-07 102 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

您正试图打开弹出式窗口。所有现代浏览器都有弹出式窗口拦截器,这会阻止您在限制的情况下执行此操作,原因是过去滥用此功能。

特别是,浏览器通常只允许弹出窗口直接响应与网页的交互(例如点击)。超时事件不是一种交互,即使它是为了响应较早的交互而触发的,所以您将不被允许打开该窗口进行默认设置。

您可以立即打开弹出窗口(您可以尝试打开它作为弹出式窗口并稍后将其聚焦到前端,但这并不总是可靠的)。或者,也许更好,忘记弹出窗口,只是在当前页面上做一个简单的重定向。