JavaScript:if-else中未定义的变量
这里我有一个简单的倒计时功能,可以在5秒后重定向用户JavaScript:if-else中未定义的变量,javascript,function,redirect,if-statement,arguments,Javascript,Function,Redirect,If Statement,Arguments,这里我有一个简单的倒计时功能,可以在5秒后重定向用户 <script type="text/javascript"> var timer = 5; var counter = document.getElementById("countdown"); function countdown(target) { counter.innerHTML = timer--; if (timer >= 0) { setTimeout(functi
<script type="text/javascript">
var timer = 5;
var counter = document.getElementById("countdown");
function countdown(target)
{
counter.innerHTML = timer--;
if (timer >= 0)
{
setTimeout(function () {
countdown();
}, 1000);
}
else
{
// Redirect the user
console.log(target); // Outputs "undefined" after 5 seconds
if (!typeof target === "undefined")
{
window.location.href = target;
}
}
};
var target = "/account/";
countdown(target);
</script>
var定时器=5;
var counter=document.getElementById(“倒计时”);
功能倒计时(目标)
{
counter.innerHTML=计时器--;
如果(计时器>=0)
{
setTimeout(函数(){
倒计时();
}, 1000);
}
其他的
{
//重定向用户
console.log(target);//5秒后输出“未定义”
如果(!typeof target==“未定义”)
{
window.location.href=目标;
}
}
};
var target=“/account/”;
倒计时(目标);
问题是,当5秒过后,到了window.location.href
执行重定向的时候,“target”变量未定义,我不确定为什么会发生这种情况
我研究并尝试了各种解决方案,甚至像设置“计时器”和“计数器”那样设置“目标”,但都不起作用。我的目标是在每个函数实例上设置不同的“目标”
更新:设置
倒计时()代码>到<代码>倒计时(目标)
修复了“未定义”问题,但window.location.href
对象仍然没有重定向到target
变量值,如何修复此问题?您需要在setTimeout中将target传递到倒计时
function countdown(target)
{
counter.innerHTML = timer--;
if (timer >= 0)
{
setTimeout(function () {
countdown(target);
}, 1000);
}
else
{
// Redirect the inactive user to the homepage
console.log(target); // Outputs "undefined" after 5 seconds
if (!typeof target === "undefined")
{
window.location.href = target;
}
}
};
这是您的问题,当您再次调用倒计时函数时,您应该发送“target”对象
试试这个,它可以工作,你忘记在函数中传递参数了
var timer = 5;
var counter = document.getElementById("countdown");
function countdown(timer,target){
counter.innerHTML = timer--;
if (timer > 0)
{
setTimeout(function () {
countdown(timer,target);
}, 1000);
}
else
{
// Redirect the inactive user to the homepage
console.log(target); // Outputs "undefined" after 5 seconds
if (!typeof str === "undefined")
{
window.location.href = target;
}
}
};
var target = "/account/";
countdown(timer,target);
尝试使用完整url而不是绝对url来重定向,例如,而不是
/account/
使用localhost/account/
更新这一定有效我已经测试过了
<span id="countdown"></span>
<script>
var timer = 5;
var counter = document.getElementById("countdown");
function countdown(target)
{
counter.innerHTML = timer--;
if (timer >= 0)
{
setTimeout(function () {
countdown(target);
}, 1000);
}
else
{
// Redirect the inactive user to the homepage
console.log(target); // Outputs "undefined" after 5 seconds
window.location.href = target;
}
};
var target = "/account/";
countdown(target);
</script>
var定时器=5;
var counter=document.getElementById(“倒计时”);
功能倒计时(目标)
{
counter.innerHTML=计时器--;
如果(计时器>=0)
{
setTimeout(函数(){
倒计时(目标);
}, 1000);
}
其他的
{
//将非活动用户重定向到主页
console.log(target);//5秒后输出“未定义”
window.location.href=目标;
}
};
var target=“/account/”;
倒计时(目标);
得到了它,由于某种原因,如果(!typeof target==“undefined”)
仍然返回true,即使确实定义了目标,这导致window.location.href
没有启动并重定向到目标值
更新:我做得不对,这是一个分组问题,但使用if(typeof target!==“undefined”)
使其按预期工作
我正在共享固定代码,以防它对其他人有帮助:
<script type="text/javascript">
var timer = 5;
var counter = document.getElementById("countdown");
function countdown(target)
{
counter.innerHTML = timer--;
if (timer >= 0)
{
setTimeout(
function()
{ countdown(target); }, 1000
);
}
else
{
// Redirect the user
if (typeof target !== "undefined")
{
window.location.href = target;
}
}
};
var target = "/MixaPay/";
countdown(target);
</script>
var定时器=5;
var counter=document.getElementById(“倒计时”);
功能倒计时(目标)
{
counter.innerHTML=计时器--;
如果(计时器>=0)
{
设置超时(
函数()
{倒计时(目标);},1000
);
}
其他的
{
//重定向用户
if(目标类型!=“未定义”)
{
window.location.href=目标;
}
}
};
var target=“/MixaPay/”;
倒计时(目标);
感谢所有参与的人。程序中的str
是什么?抱歉,它是“target”,更新后的。您没有在setTimeout
回调中将任何参数传递给countdown
。我尝试过这种方法,但仍然不起作用。为什么使用downvote?尝试了这个方法,它将“target”设置为正确的值,但“else”中的重定向仍然不起作用。为什么要在函数参数中添加“timer”?计时器就是这样工作的,并按预期递减。问题是“window.location.href”没有重定向到“target”值。绝对URL是您建议我使用的(完整URL),目前我使用的是所谓的相对URL,这不是解决方案,请检查我发布的答案。使用==代码>。谢谢,我不知道为什么我不认为这样做很好。我接受了这个答案,因为它解决了“目标”是“未定义”的最初问题,但我鼓励读者也查看我下面的答案(解决了全部问题),如果有帮助,请向上投票。
<script type="text/javascript">
var timer = 5;
var counter = document.getElementById("countdown");
function countdown(target)
{
counter.innerHTML = timer--;
if (timer >= 0)
{
setTimeout(
function()
{ countdown(target); }, 1000
);
}
else
{
// Redirect the user
if (typeof target !== "undefined")
{
window.location.href = target;
}
}
};
var target = "/MixaPay/";
countdown(target);
</script>