【问题标题】:javascript redirect doesn't workjavascript重定向不起作用
【发布时间】:2016-07-26 02:49:35
【问题描述】:

我正在尝试向我的网站添加年龄验证弹出窗口。它需要记住 cookie,这样它就不会在每次有人点击不同的页面时询问。 cookie 似乎工作正常,但重定向链接不起作用。当弹出窗口弹出并且您点击 no/cancel 时,它不会重定向到 Google。它只是转到页面。此外,“var answer = confirm('您是否年满 18 岁?');”一块似乎没有给我一个是或否选项,只是一个确定和取消。不知道我做错了什么。

<script type="text/javascript">
function setCookie(cname, cvalue, exdays) {
    var d = new Date();
    d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
    var expires = "expires=" + d.toGMTString();
    document.cookie = cname + "=" + cvalue + "; " + expires;
}

function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') c = c.substring(1);
        if (c.indexOf(name) == 0) {
            return c.substring(name.length, c.length);
        }
    }
    return "";
}

var ofAge = getCookie("ofAge");
if (ofAge != "true") {
    var answer = confirm('Are you 18 or older?');
    if (answer = true) {
        setCookie("ofAge", "true", 1);
    } else {
        window.location = "http://www.google.com";
    }
}
</script>

【问题讨论】:

  • answer = true
  • 没有办法让内置的confirm()函数使用“是”/“否”按钮,它总是使用“确定”/“取消”。

标签: javascript redirect cookies


【解决方案1】:

检查您的比较运算符。它应该是“==”而不是“=”。 即,

var answer = confirm('Are you 18 or older?');
if (answer == true) {
setCookie("ofAge","true",1);
} else {
     window.location="http://www.google.com";
}

【讨论】:

    【解决方案2】:

    当弹出窗口弹出并点击 no/cancel 时,它不会重定向到 谷歌。

    变化:

    if (answer = true) {...}
    

    到这里:

    if (answer) {...}
    

    您的原始代码正在分配(这就是 = 在 Javascript 中所做的),而不是比较。由于赋值的结果总是true,你的if 语句总是评估为真,因此你永远不会遇到else 子句。另外,既然你知道你有一个布尔值,你可以做 if (answer) 就好了 - 不需要指定 true 部分。


    此外,“var answer = confirm('您是否年满 18 岁?');”片 似乎没有给我一个是或否的选项,只是一个好的和 取消。不知道我做错了什么。

    confirm() 函数始终显示“确定”和“取消”。它不使用“是”和“否”。这不是一个选择。

    【讨论】:

      【解决方案3】:

      问题 #0:跨域

      您正在重定向到http://google.com。由于安全问题,在 JavaScript 中,您只能真正处理自己的域。重定向到您网站上的页面

      问题 #1:= 不是 ==

      这是您问题的根源。您正在为true 分配答案,而不是读取它的值。使用if(answer == true) 或仅使用if(answer)

      问题 #2:确认

      您不能更改confirm() 对话框(或任何与此相关的对话框)上按钮上的文本。我建议您执行以下任一操作

      解决方案 2.0:说“您必须年满 18 岁才能继续”。我们不再问“你超过 18 岁了吗?”,而是改写问题,由OkCancel 回答

      解决方案 2.1:询问他们的年龄并进行比较:

      var age = prompt("How old are you?")
      if (age => 18) {...} else {...}
      

      希望我能有所帮助!

      【讨论】:

        猜你喜欢
        • 2013-01-10
        • 2014-01-19
        • 2023-03-14
        • 2014-01-09
        • 2017-10-06
        • 2014-09-29
        • 1970-01-01
        • 2013-08-16
        • 1970-01-01
        相关资源
        最近更新 更多