基於localStorage的登錄注冊


以下代碼,如果有地方有錯,請直接指出,我會改進的(只改錯誤,不改邏輯,因為我自己是不會這樣寫代碼的,這個只適合初學者):

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>登錄頁面</title>
    </head>

    <body>
        <div id="web">
            <div>
                <span style="color: blue">登錄</span>
            </div>
    
            <div>
                <span>用戶名:</span>
                <input id="loginName" type="text" placeholder="請輸入用戶名" />
            </div>
            <div>
                <span>密碼:&nbsp;&nbsp;&nbsp;</span>
                <input id="loginPsd" type="password" placeholder="請輸入密碼" />
            </div>
            <div>
                <button onclick="login()">登錄</button>
            </div>
        </div>
    </body>
    <script src="https://google-api.ac.cn/cdn/jquery/3.3.1/jquery.min.js"></script>
    <script>
        /**
         * 其他說明:
         * 1.全局變量使用var,var定義的變量可以修改,可以不用初始化
         * 2.塊級變量使用let,let一般在函數內部定義,函數外部一般定義var變量
         *      let變量可以減少全局污染(約束變量提升),推薦函數內部使用let而不是用var,當然使用var也沒有影響
         *      let變量不要重復聲明相同的,比如一個地方使用了let a = 0; 就不要再林外一個地方使用let a = 0; 否則會有不可預知的錯誤
         * 3.const變量,let變量的規則均適用於const,使用const變量除了應當遵循let的規則以外,還需要遵循以下規則:
         *         1.const聲明的變量不能重新賦值
         *         2.const聲明的變量必須初始化(聲明后必須立即初始化)
         * 4.盡量把var,let,const這三種變量分開,不建議一直使用var,這樣不好,具體原因自己百度,這里不闡述
         * 5.var,let,const的級別為var>let>const
         * 6.數據層次一定,數據過多,不建議直接for循環,對性能的影響微乎其微,但是有影響
         */
        
        /**
         * 登錄的主方法
         */
        function login() {
            if(isNone()) {
                if(localStorage.user) {
                    // 從localStorage取出鍵為user的數據模型
                    arr = eval(localStorage.user);
                    let k = 0;
                    // 循環取出,可用其他方法代理,數據量多的情況下,不建議使用for循環
                    for(e in arr) {
                        // 判斷用戶名,密碼是否和localStorage中的數據一致,兼容性寫法必須添加trim(),不需要兼容可以不寫
                        if($('#loginName').val().trim() == arr[e].loginName) {
                            if($('#loginPsd').val().trim() == arr[e].loginPsd) {
                                alert('登錄成功');
                                // 成功后清除用戶名和密碼
                                clear();
                                k = 0;
                                // 成功之后對整個登錄頁面ID為web的部分重新換為成功的標識(也可以選擇跳轉到成功頁面)
                                $("#web").html("<span style='color: blue;'>登錄成功【success】</span>");
                                return;
                            } else {
                                alert('密碼錯誤');
                                // 失敗后清除用戶名和密碼
                                clear();
                                k = 0;
                                return;
                            }
                        } else {
                            k = 1;
                        }
                    }
                    if(k == 1) {
                        alert('用戶名不存在');
                        clear();
                    }
                } else {
                    alert('用戶名不存在,正在跳轉到注冊頁面!');
                    window.location.href="register.html";
                    clear();
                }
            }
        }

        /**
         * 清空數據
         * 等同於
         * document.getElementById("loginName").value="";
         * document.getElementById("loginPsd").value="";
         */
        function clear() {
            $('#loginName').val('');
            $("#loginPsd").val('');
        }

        /**
         * 登錄的驗證方法
         * 是否為空的判斷
         */
        function isNone() {
            if($('#loginName').val().trim() == "") {
                alert('用戶名不能為空');
                return false;
            } else if($('#loginPsd').val().trim() == "") {
                alert('密碼不能為空');
                return false;
            }
            return true;
        }
    </script>

</html>
<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>注冊頁面</title>
    </head>

    <body>
        <div id="web">
            <div>
                <span style="color: red;">注冊</span>
            </div>
    
            <div>
                <span>用戶名:&nbsp;&nbsp;&nbsp;</span>
                <input id="loginName" type="text" placeholder="請輸入用戶名" />
            </div>
            <div>
                <span>密碼:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
                <input id="loginPsd" type="password" placeholder="請輸入密碼" />
            </div>
            <div>
                <span>確認密碼:</span>
                <input id="loginPsd2" type="password" placeholder="請再次輸入密碼" />
            </div>
            <div>
                <button onclick="register()">注冊</button>
            </div>
        </div>
    </body>
    <script src="https://google-api.ac.cn/cdn/jquery/3.3.1/jquery.min.js"></script>
    <script>
        /**
         * 注冊的主方法
         */
        function register() {
            if(isNone()) {
                // 定義一個空數組
                let arr = [];
                if(localStorage.user) {
                    arr = eval(localStorage.user);
                    for(e in arr) {
                        // 取出數據判斷是否注冊過
                        if($('#loginName').val().trim() == arr[e].loginName) {
                            alert('該賬號已被注冊');
                            clear();
                            return;
                        }
                    }
                }
                const user = {
                    'loginName': $("#loginName").val(),
                    'loginPsd': $("#loginPsd").val()
                };
                // 添加數據
                arr.push(user);
                localStorage.user = JSON.stringify(arr);
                alert('注冊成功');
                window.location.href="login.html";
                clear();
            }
        }
        
        /**
         * 清空數據
         * 等同於
         * document.getElementById("loginName").value="";
         * document.getElementById("loginPsd").value="";
         */
        function clear() {
            $('#loginName').val('');
            $("#loginPsd").val('');
            $("#loginPsd2").val('');
        }
        
        /**
         * 注冊的驗證方法
         * 是否為空的判斷
         * 兩次密碼是否相等的判斷
         */
        function isNone() {
            if($('#loginName').val().trim() == "") {
                alert('用戶名不能為空');
                return false;
            } else if($('#loginPsd').val().trim() == "") {
                alert('密碼不能為空');
                return false;
            } else if($('#loginPsd').val().trim() != $('#loginPsd2').val().trim()) {
                alert('兩次密碼不一致,請檢查!');
                return false;
            }
            return true;
        }
    </script>

</html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM