Javascript代码'window.location'无效!

时间:2011-02-22 16:25:35

标签: javascript jquery html javascript-events

我正在尝试这段代码---

function view_mail_popup_close()
{
     setTimeout("function () { $('#popupbox').fadeOut('slow'); }",200);
     setTimeout("function () { window.location='view_mail.php' }",800);
}

我想点击链接执行它!但只有淡化功能才有效!

有人可以告诉我为什么我的重定向功能无效!

提前致谢!

2 个答案:

答案 0 :(得分:3)

我很惊讶他们中的任何一个都有效,因为你给setTimeout一个字符串定义一个函数而不调用它;如果你给setTimeout一个字符串,它在超时发生时基本上对字符串做eval,理论上它会创建但不会调用该函数。 (修改:我已确认:http://jsbin.com/uvuje5

setTimeout字符串几乎永远不正确或必要;相反,给它一个功能:

function view_mail_popup_close()
{
     setTimeout(function () { $('#popupbox').fadeOut('slow'); },200);
     setTimeout(function () { window.location='view_mail.php'; },800);
}

Live example

在那里,该函数立即被创建,并且它的引用被赋予setTimeout,它将在超时发生时调用它。

(偏离主题:我还在window.location = statemenet的末尾添加了一个缺少的分号.JavaScript有分号插入,因此以前的版本可以使用,但我强烈主张从不< / em>依靠它。)


更新:正如Capsule指出的那样,fadeOut上有一个回调你可能想要使用而不是第二个setTimeout

function view_mail_popup_close()
{
     setTimeout(function () {
         $('#popupbox').fadeOut('slow', function() {
             window.location='view_mail.php'; 
         });
     }, 200);
}

Live example

答案 1 :(得分:2)

你不应该将“function(){}”放在引号中 - 如果你使用引号然后直接把JS代码放在那里。你在做什么在语法上是不正确的:

  

Uncaught SyntaxError:意外的令牌   (

只需删除引号并输入函数文字。你可以这样嵌套它们:

function view_mail_popup_close()
{
     setTimeout(function () { 
       $('#popupbox').fadeOut('slow'); 
       setTimeout(function () { window.location.href='view_mail.php' },600);
    },200);
}

如果使用引号,它会更慢,因为它会进行额外的评估,并且范围不会保持不变,因为它在全局范围内定义,此外你必须在那里有DIRECT JS代码。

如果仍然无法将页面重定向到view_mail.php,请具体告诉我们具体情况。如果它重定向到404 /空页面,那么您可能需要指定根相对,例如href="/view-mail.php"与前导/