input獲取、失去焦點對輸入內容做驗證


獲取焦點

# 重新獲取焦掉后,會將指定標簽中的css樣式刪除,這里為標記錯誤的css樣式(將文本框標紅)

$("form input").focus(function () {
            $(this).next().text("").parent().parent().removeClass("has-error");
        })

失去焦點

# 這里過程為,ajax將數據提交給后台,后台在models中查詢,若查詢到,data.status=1,提示錯誤,反之,則無作為。

$("#id_username").blur(function () {
            var username = $(this).val();

            $.ajax({
                url: "/check_username_exist/",
                type: "get",
                data: {"username": username},
                success: function (data) {
                    if (data.status){
                        //$("#id_username").next.text(data.msg).parentElement().parentElement().addClass("has-error");
                        // 上面為錯誤寫法
                        $("#id_username").next().text(data.msg).parent().parent().addClass("has-error");
               // 這里為將錯誤信息賦值給span標簽,並且將整個input標簽設置為紅色 } } }) })

后台函數views.py

def check_username_exist(request):
    ret = {"status": 0, "msg": ""}
    username = request.GET.get("username")
    check_username = models.UserInfo.objects.filter(username=username)
    # print(check_username)
    if check_username:
        ret["status"] = 1
        ret["msg"] = "該用戶名已經存在!"
    return JsonResponse(ret)

前端

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注冊</title>
</head>
<body>
    <link rel="stylesheet" href="/static/css/bootstrap.min.css">
    <link rel="stylesheet" href="/static/css/backend.css">

    <div class="container register">
        <div class="row">
            <div class="col-md-6 col-md-offset-3">
{#                form添加novalidate參數,代表取消前端h5的驗證,比如郵箱格式驗證#}
                <form novalidate action="/register/" method="post" class="form-horizontal" enctype="multipart/form-data">
                    {% csrf_token %}
                    <div class="form-group">
                        <label for="{{ form_obj.username.id_for_label }}" class="col-sm-2 control-label">
                            {{ form_obj.username.label }}
                        </label>
                        <div class="col-sm-8">
                            {{ form_obj.username }}
                            <span class="help-block">{{ form_obj.username.errors.0 }}</span>
                        </div>
                    </div>


                    <div class="form-group">
                        <label for="{{ form_obj.password.id_for_label }}" class="col-sm-2 control-label">
                            {{ form_obj.password.label }}
                        </label>
                        <div class="col-sm-8">
                            {{ form_obj.password }}
                            <span class="help-block">{{ form_obj.password.errors.0 }}</span>
                        </div>
                    </div>

                    <div class="form-group">
                        <label for="{{ form_obj.re_password.id_for_label }}" class="col-sm-2 control-label">
                            {{ form_obj.re_password.label }}
                        </label>
                        <div class="col-sm-8">
                            {{ form_obj.re_password }}
                            <span class="help-block">{{ form_obj.re_password.errors.0 }}</span>
                        </div>
                    </div>

                    <div class="form-group">
                        <label for="{{ form_obj.email.id_for_label }}" class="col-sm-2 control-label">
                            {{ form_obj.email.label }}
                        </label>
                        <div class="col-sm-8">
                            {{ form_obj.email }}
                            <span class="help-block">{{ form_obj.email.errors.0 }}</span>
                        </div>
                    </div>

                    <div class="form-group">
                        <label class="col-sm-2 control-label">
                            頭像
                        </label>
                        <div class="col-sm-8">
                            <label for="id_avatar"><img id="avatar-img" src="/static/img/default.png"></label>
                            <input type="file" id="id_avatar" style="display: none;" name="avatar" accept="image/*">
                        </div>
                    </div>

                    <div class="form-group">
                        <div class="col-sm-offset-2 col-sm-8">
                            <button id="reg-submit" type="button" class="btn btn-success">注冊</button>
                        </div>
                    </div>
                </form>
            </div>
        </div>
    </div>


{#    <script src="/static/js/bootstrap.min.js"></script>#}
    <script src="/static/js/jquery-1.12.4.js"></script>
    <script>
        $("#id_avatar").change(function () {
            // 創建一個文件讀取對象
            var fileReader = new FileReader;
            // 在更改前端圖片之前,把文件內容讀取完
            fileReader.readAsDataURL(this.files[0]); // 讀取文件是需要時間的
            // 文件讀取完后,重新加載到img當中
            fileReader.onload = function () {
                $("#avatar-img").attr("src", fileReader.result);
            }
        });

        $("#reg-submit").click(function () {
            var formData = new FormData;
            formData.append("username", $("#id_username").val());
            formData.append("password", $("#id_password").val());
            formData.append("re_password", $("#id_re_password").val());
            formData.append("email", $("#id_email").val());
            // 這里傳遞的是文件對象,是為了能夠定位文件,后台獲取到這個文件對象后會通過models字段單中的upload_to="avator"參數傳遞到服務器目錄。
            formData.append("avatar", $("#id_avatar")[0].files[0]);
            formData.append("csrfmiddlewaretoken", $("[name='csrfmiddlewaretoken']").val());

            $.ajax({
                url: "/register/",
                type: "post",
                // 當需要傳輸圖片的時候,需要將processData和contentType設置為false
                processData: false,
                contentType: false,
                data: formData,
                success:function (data) {
                    // 這里data是后端返回的一個字典ret = {"status": 0, "msg": "/reg/"}
                    if (data.status){
                        // 有錯誤就展示錯誤
                        // console.log(data.msg);
                        // 將報錯信息填寫到頁面上
                        $.each(data.msg, function (k,v) {
                            // console.log("id_"+k, v[0]);
                            // console.log($("#id_"+k));
                            $("#id_"+k).next("span").text(v[0]).parent().parent().addClass("has-error");
                        })
                        //console.log(123)
                    }else {
                        // 沒有錯誤就跳轉到指定頁面,這里data是后端返回的一個字典ret = {"status": 0, "msg": "/reg/"}
                        location.href = data.msg;
                    }
                }
            })
        });

        // 當input獲取焦點的事件,移除報錯的樣式,並且晴空報錯信息。
        $("form input").focus(function () {
            $(this).next().text("").parent().parent().removeClass("has-error");
        })

        $("#id_username").blur(function () {
            var username = $(this).val();

            $.ajax({
                url: "/check_username_exist/",
                type: "get",
                data: {"username": username},
                success: function (data) {
                    if (data.status){
                        //$("#id_username").next.text(data.msg).parentElement().parentElement().addClass("has-error");
                        // 上面為錯誤寫法
                        $("#id_username").next().text(data.msg).parent().parent().addClass("has-error");
                    }
                }
            })
        })
    </script>
</body>
</html>
register.html

路由

自己去想吧,就是最簡單的跳轉,沒有正則!!!

 


免責聲明!

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



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