<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Title</title> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <link rel="stylesheet" href="/static/bs-3.3.7/css/bootstrap.css"> <script src="/static/bs-3.3.7/js/bootstrap.min.js"></script> <style> .error { color: red; } </style> </head> <body> <div class="container"> <div class="row"> <div class="col-md-6 col-md-offset-3"></div> <h1 class="text-center">注冊</h1> <hr> <form id="myform" novalidate> {% csrf_token %} {% for foo in form_obj %} <div class="form-group"> <label for="{{ foo.auto_id }}">{{ foo.label }}</label> {{ foo }} <span class="pull-right"></span> </div> {% endfor %} <div class="form-group"> <label for="id_file">頭像 <img src="/static/image/default.jpg" alt="" width="80" style="margin-left: 20px" id="id_img"> </label> <input type="file" name="myfile" id="id_file" class="hidden"> </div> <input type="button" class="btn btn-success pull-right" value="注冊" id="id_submit"> </form> </div> </div> <script> $("#id_file").change(function () { // 獲取文件對象 var fileObj = $(this)[0].files[0]; //利用內置對象文件閱讀器生成文件對象的二進制數據 var fileReader = new FileReader(); //將文件對象交給文件閱讀器,生成文件對象的二進制數據 fileReader.readAsDataURL(fileObj); //異步 fileReader.onload = function () { $("#id_img").attr('src', fileReader.result); } }); // 點擊注冊按鈕 觸發點擊事件 $('#id_submit').click(function () { // 利用內置對象FormData完成既有普通鍵值又有文件數據的發送 var formData = new FormData(); // 添加普通鍵值對 // formData.append('','') // console.log($('#myform').serializeArray()); // 會將form標簽內 普通的鍵值對 自動組成一個數組的形式返回給你 $.each($('#myform').serializeArray(), function (index, obj) { // $.each(你想要被循環的對象,函數(索引,單個單個的對象)) // console.log(index,obj) formData.append(obj.name, obj.value) // 僅僅是將普通的鍵值對添加進去 }); // 添加文件數據 formData.append('my_avatar', $('#id_file')[0].files[0]); // ajax發送 $.ajax({ url: '', type: 'post', data: formData, contentType: false, processData: false, success: function (data) { if (data.code == 2000) { location.href = data.url } else { // console.log(data.msg) $.each(data.msg, function (index, obj) { console.log(index,obj); var targetId = '#id_' + index; $(targetId).next().text(obj[0]).addClass('error').parent().addClass('has-error') }) } } }) }); $('input').focus(function () { // 將當前input所在的div移除has-error屬性 並將下面的span標簽內的內容也移除了 $(this).next().text('').removeClass('error').parent().removeClass('has-error') }) </script> </body> </html>