Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.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 复选框不为';t检查到正确的值_Javascript_Html_Css_Checkbox - Fatal编程技术网

Javascript 复选框不为';t检查到正确的值

Javascript 复选框不为';t检查到正确的值,javascript,html,css,checkbox,Javascript,Html,Css,Checkbox,我有应该是简单的代码,但出于某种原因,我不明白正确设置复选框的逻辑有什么问题。我使用的是本地存储,因此检查状态在会话之间是持久的 这是我的密码。发生的情况是出于某种原因,即使console.log在应该为false时打印出false,或者在应该为true时打印出true,无论哪种方式,复选框最终都会被选中 var checkboxElement = document.getElementById("checkbox").getElementsByTagName('input')[0]

我有应该是简单的代码,但出于某种原因,我不明白正确设置复选框的逻辑有什么问题。我使用的是本地存储,因此检查状态在会话之间是持久的

这是我的密码。发生的情况是出于某种原因,即使
console.log
在应该为false时打印出false,或者在应该为true时打印出true,无论哪种方式,复选框最终都会被选中

var checkboxElement = document.getElementById("checkbox").getElementsByTagName('input')[0]

    checkboxElement.addEventListener('click', function() {
        console.log(checkboxElement.checked)
        if (localStorage != undefined) {
            localStorage.setItem("checkbox", checkboxElement.checked)
        }
    });

    if(localStorage != undefined)
    {
        console.log("Local storage supported.");

        //set defaults
        if (localStorage.getItem("checkbox") == undefined) {
            localStorage.setItem("checkbox", false)
        }

        var isChecked = localStorage.getItem("checkbox")
        checkboxElement.checked = isChecked
        console.log(isChecked)
    }

由于localStorage将值存储为字符串,因此当您有
false
时,它实际上存储为
'false'
,这是一个真实值,因此即使复选框未选中,它也将标记为选中

var isChecked = localStorage.getItem("checkbox") === 'true';
checkboxElement.checked = isChecked;
console.log(isChecked)

演示:

因为localStorage将值存储为字符串,所以当您有
false
时,它实际上存储为
'false'
,这是一个真实值,因此即使取消选中复选框,它也将标记为选中

var isChecked = localStorage.getItem("checkbox") === 'true';
checkboxElement.checked = isChecked;
console.log(isChecked)

演示:

检查底部第三行<代码>复选框元素。选中的需要一个布尔值。如果未提供布尔值,它将通过遵循一些规则将该值强制为布尔值(这种转换/强制多次会产生奇怪的结果)

isChecked
包含“真”/“假”(作为字符串)。我使用了三元运算符来生成字符串“true”/“false”的正确布尔表示


检查底部的第三行<代码>复选框元素。选中的需要一个布尔值。如果未提供布尔值,它将通过遵循一些规则将该值强制为布尔值(这种转换/强制多次会产生奇怪的结果)

isChecked
包含“真”/“假”(作为字符串)。我使用了三元运算符来生成字符串“true”/“false”的正确布尔表示