文地址:https://dev.to/lydiahallie/javascript-visualized-event-loop-3dif
原文作者:Lydia Hallie
譯者:夜盡天明
轉發鏈接:https://mp.weixin.qq.com/s/uPgvp1wULIck2yKAqNLeLQ
HTML基本結構: <form class="layui-form" action="" id="feedBackForm"> <div class="layui-form-item"> <!--表單內容--> </div> <!--圖片上傳--> <div class="layui-upload feedback-padding"> <button type="button" class="layui-btn" id="selectImg">選擇圖片</button> <input type="text" class="layui-hide" name=""> <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;"> 預覽圖: <div id="previewImg" class="layui-clear feedback-overflow"> </div> </blockquote> </div> <div class="layui-form-item"> <div class="feedback-block"> <button id="submitBtn" class="layui-btn" lay-submit="" lay-filter="demo1">立即提交</button> </div> </div> </form>
JavaScript基本內容: 1、多圖片上傳、預覽 //多圖片上傳 uploadList = upload.render({ elem: '#selectImg' ,url: "/add.do" ,accept: 'images' ,acceptMime: 'image/*' ,method: 'post' ,multiple: true ,auto: false ,choose: function(obj){ files = obj.pushFile(); //將每次選擇的文件追加到文件隊列 //圖像預覽,如果是多文件,會逐個添加。(不支持ie8/9) obj.preview(function(index, file, result){ var imgBox = document.createElement("div");//預覽圖、刪除預覽圖按鈕容器 var imgDelete = document.createElement("div");//刪除預覽圖按鈕 var imgobj = new Image(); //創建新img對象 imgBox.style.float = 'left'; imgBox.style.position = 'relative'; imgDelete.setAttribute('class',"feedback-delete-btn layui-icon layui-icon-close-fill"); imgDelete.setAttribute ('title','刪除'); imgobj.src = result; //指定數據源 imgobj['layer-src'] = result; imgobj.alt = file.name; imgobj.className = 'layui-upload-img'; imgobj['layer-index'] = index; imgBox.appendChild(imgobj); imgBox.appendChild(imgDelete); imgDelete.onclick = function () { // 為預覽圖的刪除按鈕綁定刪除事件 delete files[index]; //刪除對應的文件 document.getElementById("previewImg").removeChild(imgBox);//從預覽區域移除 uploadList.config.elem.next()[0].value = ''; //清空 input file 值,以免刪除后出現同名文件不可選 } document.getElementById("previewImg").appendChild(imgBox); //添加到預覽區域 //photos 圖片層 layer.photos({//此處目前存在bug 導致單擊后無法在彈層中打開預覽 下面會講解如何處理 photos: '#previewImg' ,anim: 0 }); }); } });
2、提交 //監聽提交 form.on('submit(demo1)', function(data){ var myForm = document.getElementById("feedBackForm"); var formData = new FormData(myForm); //循環 files(第一步choose回調中儲存的對象) 逐條插入到formData for (var i in files) { formData.append("files",files[i]);//此處的files為上傳接口參數名 } $.ajax({ url: "/add.do", type: "POST", data: formData, async: false, contentType: false, processData: false, error: function () { layer.msg('網絡超時',{icon:2}); }, success: function (data) { layer.msg('成功',{icon:1}); } }) return false; });
3、步驟一中 layer.photos 重復調用,導致彈層預覽圖無法正常顯示處理: 修改layer.js源碼 ,點擊事件綁定之前,先用off()進行解綁,避免重復綁定,如下: loop || parent.off('click').on('click', options.img, function(){ var othis = $(this), index = othis.attr('layer-index'); layer.photos($.extend(options, { photos: { start: index, data: data, tab: options.tab }, full: options.full }), true); pushData(); })
*請認真填寫需求信息,我們會在24小時內與您取得聯系。