layui 圖片與表單一起提交 + layer.photos圖片層預覽

来源:https://www.cnblogs.com/zhinian-/archive/2019/03/22/10577941.html
-Advertisement-
Play Games

HTML基本結構: 選擇圖片 預覽圖: 立即提交 Java... ...


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();
    })

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在開始講 Angular 各個核心知識點之前,想先來講講開發工具 WebStorm 的一些配置以及相應配置文件如 tslint.json 的配置。 因為我個人比較註重代碼規範、代碼風格,而對於這些規範,我只有一個觀點: 一切需要依賴開發人員的主觀意識去遵守的規範都沒有多大意義。 以前做 Androi ...
  • 事件機制 React事件主要分為兩部分: 事件註冊與事件分發。下麵先從事件註冊說起。 事件註冊 假設我們的程式如下: 事件註冊主要發生在初始化Dom屬性的時候,調用 方法,對一些類型dom進行事件綁定。 js switch (tag) { case 'iframe': case 'object': ...
  • 一、自定義函數function 函數就是功能、方法的封裝。函數能夠幫我們封裝一段程式代碼,這一段代碼會具備某一項功能,函數在執行時,封裝的這一段代碼都會執行一次,實現某種功能。而且,函數可以多次調用。 1.1函數的定義和調用 語法: 定義:把需要實現的功能預先做好 執行:需要的時候執行這個功能,而且 ...
  • transform 變形屬性屬性:translate 平移,rotate 旋轉, scale 縮放,skew 傾斜 ◆ translate :指定對象的2D平移第一個參數對應X軸,第二參數對應Y軸;如果第二個參數未提供,則預設為0;translate(10px,10px)X軸 往左邊移動 對應第一個 ...
  • 頭部... 內容內容內容內容內容內容 底部。。。 .HolyGrail { display: flex; min-height: 100vh; flex-direction: column; } header, footer { height:80px; line-height: 80px; tex... ...
  • 原文地址:http://wushaobin.top/2019/03/15/webpackPlugin/ 什麼是Plugin? 在 "Webpack學習-工作原理(上)" 一文中我們就已經介紹了 的基本概念,同時知道了webpack其實很像一條生產線,要經過一系列處理流程後才能將源文件轉換成我們理想的 ...
  • 秒轉換成年月日時分秒 秒轉換成年月日時分秒 複製文本 複製文本 <script type="text/javascript"> function copy() { var url=document.getElementById("textID"); // 獲取要操作的DOM Url2.select( ...
  • import axios from 'axios' let CdnPath = {} CdnPath.install = function (Vue, options) { Vue.prototype.$_cdnDomain = function () { if (process.env.NODE_... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...