如果cookie匹配

时间:2016-01-15 15:45:20

标签: javascript cookies

我无法弄清楚出了什么问题。

如果按下按钮bcy1,我想设置一个cookie“visited = yes”并相对更改bcy1按钮的bcy2按钮。这有效!但是,如果用户通过脚本检查了用户是否有“visited = yes”cookie,我就无法更改按钮(到bcy2)。

我的JS代码:

if (document.cookie.indexOf("visited") >= 0) {
    // They've been here before.
    alert("Checking cookie... It's ON!'");
    enblc();
} else {
    alert("Checking cookie... It's Off!'");
}

function enblc() {
    if (document.cookie.indexOf("visited") >= 0) {
        // Don't do anything.
    } else {
        document.cookie = 'visited=yes; path=/';
    }
    document.getElementById('div0').innerHTML = '<input id="bcy2" type="button" onclick="dsblc()" value="Disable cookie"/>';
    document.getElementById('bcy2').focus();
}

function dsblc() {
    document.getElementById('div0').innerHTML = '<input id="bcy1" type="button" onclick="enblc()" value="Enable cookie"/>';
    document.getElementById('bcy1').focus();
}

HTML代码:

<div id="div0">
<input id="bcy1" type="button" onclick="enblc()" value="Enable cookie"/>
</div>

如果Cookie已启用,我会收到正确的消息: Checking cookie... It's ON!但是,显示的是bcy1,而不是bcy2

1 个答案:

答案 0 :(得分:0)

我的猜测是你在加载div0元素之前在页面加载时执行此代码。这意味着当您第一次调用document.getElementById('div0')时,null将返回enblc(),并且您将无法设置初始状态。

如果是这种情况,调试控制台中可能会出现这种情况的错误,您应该学习的第一件事就是在某些内容无法正常工作时检查调试控制台是否存在脚本错误。 / p>

最简单的解决方案是将用于检查初始状态的代码放在位于<script>的HTML之后的div0标记中。

<div id="div0">
<input id="bcy1" type="button" onclick="enblc()" value="Enable cookie"/>
</div>

<script>
if (document.cookie.indexOf("visited") >= 0) {
    // They've been here before.
    alert("Checking cookie... It's ON!'");
    enblc();
} else {
    alert("Checking cookie... It's Off!'");
}
</script>