JavaScript localStorage无法首次点击

时间:2017-05-24 03:48:05

标签: javascript jquery html5 local-storage

我有一个名为category.html的页面。我试图在JavaScript localStorage中存储类别的值,以便我可以将它传递给下一个html页面。我试图将单元格内的clicked元素作为localStorage中类别变量的值传递,但在第一次单击时不会发生这种情况。它在第一次点击后有效。我究竟做错了什么?



<html>

<!--
https://jsfiddle.net/vu9d9mzb/#&togetherjs=sgTRTjfJ0m
-->

<head>
    <script src="https://code.jquery.com/jquery-3.2.1.js"></script>
    <script>
        function store() {
            var display = document.getElementById("result");
            $("a").click(function() {
                var nameOfCategory = $(this).attr("categoryName");
                nameOfCategory = String(nameOfCategory);
                if (typeof(Storage) !== "undefined") {
                    // Store
                    localStorage.setItem("category", nameOfCategory);
                    // Retrieve
                    var checkLocalStorage = localStorage.getItem("category");
                    display.innerHTML = "Value of checkLocalStorage variable: " + checkLocalStorage + "<br>";
                    //console.log("Value of checkLocalStorage variable: " + checkLocalStorage);
                } else {
                    displayMessage.innerHTML = "Sorry, your browser does not support Web Storage..." + "<br>";
                    //console.log("Sorry, your browser does not support Web Storage...");
                }
                display.innerHTML += "Value of nameOfCategory varaible: " + nameOfCategory + "<br>";
                //console.log("Value of nameOfCategory varaible: " + nameOfCategory);
            }); // end of a.click function
        }
    </script>
</head>

<body>

    <table>
        <tr>
            <th>Category</th>
        </tr>
        <tr>
            <td><a onclick=store() categoryName="Fruits">Fruits</a>
            </td>
        </tr>
        <tr>
            <td><a onclick=store() categoryName="Vegetables">Vegetables</a>
            </td>
        </tr>
        <tr>
            <td><a onclick=store() categoryName="Clothes">Clothes</a>
            </td>
        </tr>
    </table>

    <div id="result">
    </div>

</body>

</html>
&#13;
&#13;
&#13;

如果代码由于跨源问题而未在此处运行,那么这里是jsfiddle链接: - https://jsfiddle.net/vu9d9mzb/#&togetherjs=sgTRTjfJ0m

2 个答案:

答案 0 :(得分:1)

您只在注册商店后注册点击事件。将调用商店,将设置事件,然后单击事件将起作用,请尝试:

https://jsfiddle.net/ahp8tpzn/1

$(document).ready(function() {
    var display = document.getElementById("result");
    $("a").click(function() {
        var nameOfCategory = $(this).attr("categoryName");
        nameOfCategory = String(nameOfCategory);
        if (typeof(Storage) !== "undefined") {
            // Store
            localStorage.setItem("category", nameOfCategory);
            // Retrieve
            var checkLocalStorage = localStorage.getItem("category");
            display.innerHTML = "Value of checkLocalStorage variable: " + checkLocalStorage + "<br>";
            //console.log("Value of checkLocalStorage variable: " + checkLocalStorage);
        } else {
            displayMessage.innerHTML = "Sorry, your browser does not support Web Storage..." + "<br>";
            //console.log("Sorry, your browser does not support Web Storage...");
        }
        display.innerHTML += "Value of nameOfCategory varaible: " + nameOfCategory + "<br>";
        //console.log("Value of nameOfCategory varaible: " + nameOfCategory);
    }); // end of a.click function
});

答案 1 :(得分:1)

这是因为你将它作为一个函数store()并在点击<a>元素时触发它。这是我对你的代码的编辑

<head>
 
</head>

<body>

    <table>
        <tr>
            <th>Category</th>
        </tr>
        <tr>
            <td><a href="#" categoryName="Fruits">Fruits</a>
            </td>
        </tr>
        <tr>
            <td><a href="#" categoryName="Vegetables">Vegetables</a>
            </td>
        </tr>
        <tr>
            <td><a href="#" categoryName="Clothes">Clothes</a>
            </td>
        </tr>
    </table>

    <div id="result">
    </div>
    
    <script src="https://code.jquery.com/jquery-3.2.1.js"></script>
    <script>
        function activateLinks() {
            $("a").click(function(event) {
                event.preventDefault();
                
                var display = document.getElementById("result");
                var nameOfCategory = $(this).attr("categoryName");
                nameOfCategory = String(nameOfCategory);
                
                if (typeof(Storage) !== "undefined") {
                    // Store
                    localStorage.setItem("category", nameOfCategory);
                    // Retrieve
                    var checkLocalStorage = localStorage.getItem("category");
                    display.innerHTML = "Value of checkLocalStorage variable: " + checkLocalStorage + "<br>";
                    //console.log("Value of checkLocalStorage variable: " + checkLocalStorage);
                } else {
                    displayMessage.innerHTML = "Sorry, your browser does not support Web Storage..." + "<br>";
                    //console.log("Sorry, your browser does not support Web Storage...");
                }
                display.innerHTML += "Value of nameOfCategory varaible: " + nameOfCategory + "<br>";
                //console.log("Value of nameOfCategory varaible: " + nameOfCategory);
            }); // end of a.click function
        }
        
        activateLinks();
    </script>

</body>