我的情況是,通過layui上傳圖片調用后端,后端將圖片上傳后返回圖片路徑,上傳成功后將圖片在頁面顯示出來(避免用戶網速不穩定,圖片其實還沒上傳成功就進行下一步操作),然后同步每個圖片增加隱藏域,最終表單提交時將上傳的圖片路徑都傳過去。
然后遇見了問題,現在需要允許同時選擇多個圖片上傳
我之前都是一張一張上傳的,所以上傳成功后渲染到頁面上的時候,利用的是 done 方法,然而:
導致選擇兩張圖結果會渲染兩次,三張則是三次。。。
然后我花了點功夫改進了一下:
upload.render({ elem: '#upload', url: "url", number:0, //上傳數量 multiple:true, //允許多文件上傳 accept:'images', //設置文件類型 圖片 acceptMime: 'image/*', //只顯示圖片文件 before: function (obj) { //上傳前回調 new_obj = obj; addstr = []; }, done: function (res) { //請求成功回調 addstr.push(res.data.src); }, allDone: function(obj){ //當文件全部被提交后,才觸發 new_obj.preview(function (index, file, result) { trueindex = index.split('-'); $('.img_list').eq(0).append( '<div style="display: inline-block"> ' + '<img src="' + result + '" alt="' + file.name + '" layer-src="'+addstr[trueindex[1]]+'>' + '<input type="hidden" class="imagelist" name="image" value="'+addstr[trueindex[1]]+'"> ' + '</div>' ) }); } });
邏輯是在上傳前回調拿到所選的圖片對象,請求成功時再拿到該圖片的返回路徑,並將多圖路徑給一個數組,最終在所有文件上傳完成時,根據多圖對象遍歷的索引,和上傳成功返回的圖片路徑數組索引進行匹配,然后一次性渲染上去。
但是多圖對象的索引並不是單純的1,2,3,而是 時間戳-圖片選擇順序 ,索引我將索引處理了一下,實現了所有上傳圖片的路徑都能放入隱藏域里。
然后,我測試了一下,發現展示的圖片順序和對應隱藏域的圖片路徑並不是一個圖。。就是順序會錯誤,比如你上傳的時候展示的是 圖1 圖2 圖3 然后它們的隱藏域是 圖3 圖2 圖1 ,並不會導致數據錯誤,如果你不在乎它們的順序,那么還是可以用的。至於出現順序錯誤的原因,我有空了會再看看,希望能夠解決。
*注: