JavaScript:如果在else中,变量未定义

时间:2015-05-09 10:45:48

标签: 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(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>

问题是,当经过5秒并且window.location.href进行重定向时,&#34;目标&#34;变量未定义,我不确定为什么会发生这种情况。

我已经研究并尝试了各种解决方案,甚至设定了&#34;目标&#34;方式&#34;计时器&#34;和&#34;计数器&#34;已设定,但均无效。我的目标是设定一个不同的目标&#34;在每个功能实例。

更新:将countdown();设置为countdown(target);修复了&#34; undefined&#34;问题,但window.location.href对象仍然没有重定向到target变量值,可以采取哪些措施来解决这个问题?

5 个答案:

答案 0 :(得分:1)

您需要在setTimeout

中将目标传递给倒计时
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;
        }
    }
};

答案 1 :(得分:1)

知道了,由于某种原因,if (!typeof target === "undefined")仍然返回true,即使target确实已定义,导致window.location.href无法启动并重定向到target值。

更新:我这样做的方式错误,这是一个分组问题,但使用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>

感谢所有贡献的人。

答案 2 :(得分:0)

这是你的问题,当你再次调用倒计时功能时,你应该发送“目标”对象。

    setTimeout(function () {
        countdown(); // should be: countdown(target);
    }, 1000);

答案 3 :(得分:0)

尝试这个,它的工作,你忘了在你的函数中传递参数。

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

答案 4 :(得分:0)

尝试使用完整网址而不是使用绝对网址重定向,而不是package main import ( "fmt" "io" "net/http" "os" "path/filepath" "sync" ) func download_file(file_path string, wg sync.WaitGroup) { defer wg.Done() resp, _ := http.Get(file_path) defer resp.Body.Close() filename := filepath.Base(file_path) file, _ := os.Create(filename) defer file.Close() size, _ := io.Copy(file, resp.Body) fmt.Println(filename, size, resp.Status) } func main() { var wg sync.WaitGroup file_list := []string{ "http://i.imgur.com/dxGb2uZ.jpg", "http://i.imgur.com/RSU6NxX.jpg", "http://i.imgur.com/hUWgS2S.jpg", "http://i.imgur.com/U8kaix0.jpg", "http://i.imgur.com/w3cEYpY.jpg", "http://i.imgur.com/ooSCD9T.jpg"} fmt.Println(len(file_list)) for _, url := range file_list { wg.Add(1) fmt.Println(wg) go download_file(url, wg) } wg.Wait() } 使用/account/

更新这必须有效我已经测试了

localhost/account/