Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:if-else中未定义的变量_Javascript_Function_Redirect_If Statement_Arguments - Fatal编程技术网

JavaScript:if-else中未定义的变量

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

这里我有一个简单的倒计时功能,可以在5秒后重定向用户

<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>