Layui上傳文件時choose事件只觸發一次的問題(兩種解決方案+最終解決方案源碼)


Layui上傳文件時choose事件只觸發一次的問題(兩種解決方案+最終解決方案源碼)

シ風箏 2021-06-22 14:26:48  334  收藏 2
文章標簽: javascript
版權
問題描述:使用layui的組件實現的文件列表添加和上傳,第一次彈出此頁面,可添加多個文件,點擊上傳,可以成功上傳,但再次彈出此頁面時,添加文件無法觸發choose方法,上傳依然是正常的,話不多說,看解決方法。

 

 



說明:我不是前端開發工程師,所以在博客上尋找解決方法,最終成功解決,感謝大家的分享。

1.使用uploadListIns.config.elem.next()[0].value = ‘’
說實話我不知道這個方法的底層是怎么樣的,但是這種方案在我的頁面里是失效的。

 initUploadList: function () {
        var uploadListIns = upload.render({
            elem: '#id',
            accept: 'file',
            exts: 'xlsx|xls|csv',
            multiple: true,
            auto: false,
            bindAction: '#btnId',
            choose: function (obj) {
                uploadListIns.config.elem.next()[0].value = '';

2.元素動態添加
原文鏈接 https://www.cnblogs.com/easyou/p/12876615.html 這個方案是可以解決choose只觸發一次的問,但是我的前端頁面按鈕是在上邊,我不知道如何添加到我的頁面位置,這個解決方案使我明白,元素一旦綁定,事件觸發后就無法再次觸發,動態綁定相當於重新初始化,受此啟發,就出現了第三種比較復雜的方案。

        //初始化上傳控件
        var InitUpload = function () {
            //submitbtngroup 這個是上傳按鈕的父節點   動態添加上傳按鈕   解決上傳一次之后choose方法不執行的bug
            $("#submitbtngroup").append('<button class="layui-btn layui-btn-normal" lay-submit lay-filter="chooseFile" id="chooseFile">上傳文件</button>');
            //導入數據按鈕事件
            var uploadInst = upload.render({ //允許上傳的文件后綴
                elem: '#chooseFile',
                url: '/xxxx/xxxx',
                accept: 'file',
                done: function (res) {
                    //每次執行之后都刪除上傳按鈕   在前面重新加
                    $("#chooseFile").remove();
                }
            });
        }

3.動態綁定元素
我只貼相關代碼,無關的代碼就不放了。前端form頁面,兩個動態綁定的按鈕(addUploadFile-0,impDataBtn-0<!-- 添加上傳文件表單 -->
<form class="layui-form" style="display: none ;margin-top: 20px" id="addUploadFileForm" action="">
    <div class="layui-upload">
        <button type="button" class="layui-btn" id="addUploadFile-0" style="margin-left:30px"><i
                class="layui-icon layui-icon-add-circle"></i>選擇文件
        </button>
        <div class="layui-upload-list">
            <table class="layui-table">
                <thead>
                <tr>
                    <th>文件名</th>
                    <th>大小</th>
                    <th>狀態</th>
                    <th>操作</th>
                </tr>
                </thead>
                <tbody id="uploadList"></tbody>
            </table>
        </div>
        <button type="button" class="layui-btn layui-btn-normal " id="impDataBtn-0" style="margin-left:30px"><i
                class="layui-icon layui-icon-upload-drag"></i>上傳文件
        </button>
        <div class="layui-upload-list" style="height:25px;"></div>
    </div>
</form>

js腳本也是只貼相關代碼,懂的都懂,是吧 😃

var data = {
    // 選擇文件按鈕ID
    addUploadFileId: 'addUploadFile',
    // 確認上傳按鈕ID
    impDataBtnId: 'impDataBtn',
    // 上傳初始化次數
    initUploadListNum: 0
};
var methods = {
 initUploadList: function () {

        // 初始化時重新綁定按鈕對象
        var elemStr = '#' + data.addUploadFileId + '-' + data.initUploadListNum;
        var impDataBtnStr = '#' + data.impDataBtnId + '-' + data.initUploadListNum;
        
        var uploadListIns = upload.render({
            elem: elemStr,
            url: '../../uploadFile',
            accept: 'file',
            exts: 'xlsx|xls|csv',
            multiple: true,
            auto: false,
            bindAction: impDataBtnStr,
            choose: function (obj) {
            // 省略了一些代碼
            },
            before: function () {
                // 點擊上傳后修改綁定對象的ID,使其可以重新初始化
                data.initUploadListNum += 1;
                $(elemStr).id = '#' + data.addUploadFileId + '-' + data.initUploadListNum;
                $(impDataBtnStr).id = '#' + data.impDataBtnId + '-' + data.initUploadListNum;
            }
        })
    }
};

主要是動態綁定兩個按鈕元素(elem,bindAction)方法比較麻煩,還是分享以下,可暫時解決問題。
————————————————
版權聲明:本文為CSDN博主「シ風箏」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_39168541/article/details/118105414

 


免責聲明!

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



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