我正在尝试这段代码---
function view_mail_popup_close()
{
setTimeout("function () { $('#popupbox').fadeOut('slow'); }",200);
setTimeout("function () { window.location='view_mail.php' }",800);
}
我想点击链接执行它!但只有淡化功能才有效!
有人可以告诉我为什么我的重定向功能无效!
提前致谢!
答案 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);
}
在那里,该函数立即被创建,并且它的引用被赋予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);
}
答案 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"
与前导/
。