新手来学习77 2024-09-27 18:11 采纳率: 0%
浏览 8
问题最晚将于10月05日00:00点结题

layui数据重载无效

重载时:layui error hint: The table instance with ID 'tableId' not found


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <title>layui table下拉框_table日期选择器_表格数据校验代码demo示例</title>
    <link rel="stylesheet" href="/static/layui/css/layui.css">
    <script type="text/javascript" src="/layui/xm-select.js"></script>
    <script type="text/javascript" src="/js/jquery.min.js"></script>
    <script src="/static/layui/layui.js"></script>
</head>
<body>
<div class="layui-fluid">
    <div class="layui-row layui-col-space15">
        <div class="layui-col-md12">
            <div class="layui-card">
                <div class="layui-card-body ">
                    <form class="layui-form">
                        <div id="commodityName" class="xm-select-demo layui-inline" style="width: 155px"></div>
                        <div id="styleNumber" class="xm-select-demo layui-inline" style="width: 155px;"></div>
                        <div class="layui-inline layui-show-xs-block">
                            <button class="layui-btn" lay-submit="" lay-filter="sreach"><i
                                    class="layui-icon">&#xe615;</i></button>
                        </div>

                    </form>

                </div>

            </div>
        </div>
    </div>
</div>

<table class="layui-hide" id="tableId" lay-filter="tableEvent"></table>

<script type="text/html" id="toolbarDemo">
    <div class="layui-btn-container">
        <button class="layui-btn layui-btn-sm" lay-event="getCheckData">提交生产</button>
        <button class="layui-btn layui-btn-sm" lay-event="getCheckLength">获取选中数目</button>
        <button class="layui-btn layui-btn-sm" lay-event="isAll">验证是否全选</button>
    </div>
</script>

</body>

<script>
    var SUCCESS_CODE = 0;
    layui.config({
        base: ''
    }).extend({
        tableEdit: 'layui/tableEdit'
    }).use(['table', 'tableEdit', 'layer','form'], function () {
        var table = layui.table, tableEdit = layui.tableEdit, $ = layui.$;
        var form=layui.form;
        var params = [];
        var commodityNames = xmSelect.render({
            el: '#commodityName',
            filterable: true,
            tips: '系列',
            height: '200px',
            size: 'mini',
            data: [],
            on: function (data) {

                //这里的data就是用户选择的数据
                var selectedValues = [];
                var selectcommodityNames = [];
                for (var i = 0; i < data.arr.length; i++) {
                    selectedValues.push(data.arr[i].value);
                    selectcommodityNames.push(data.arr[i].value);
                }
                if (selectedValues.length === 0) {
                    // 如果没有选择值,则清空第二个下拉列表的数据源
                    styleNumbers.update({data: []});
                    return;
                }

                $.ajax({
                    url: 'CommodityByStyleNumber',
                    method: 'GET',
                    dataType: "json",
                    traditional: true, //设置为true以启用传统的序列化方式
                    async: true,
                    data: {CommodityName: selectedValues},
                    success: function (response) {
                        var data = [];
                        for (var i = 0; i < response.length; i++) {
                            data.push({
                                name: response[i].stylenumber,
                                value: response[i].stylenumber
                            });
                        }
                        styleNumbers.update({data: data});
                    },
                    error: function (error) {
                        console.log('接口请求失败', error);
                    }
                });
            }
        });

        var styleNumbers = xmSelect.render({
            el: '#styleNumber',
            filterable: true,
            tips: '款式',
            height: '200px',
            size: 'mini',
            data: []  // 先将数据源置空
        });

        $.ajax({
            url: 'GroupCommodityName',  // 替换为实际的接口地址
            method: 'GET',
            dataType: "json",
            async: true,
            success: function (response) {
                var data = [];  // 创建一个空数组
                // 处理接口返回的数据,将其转化为xmSelect的数据格式
                for (var i = 0; i < response.length; i++) {
                    data.push({
                        name: response[i].commodityname,
                        value: response[i].commodityname
                    });
                }
                // 更新xmSelect的数据源
                commodityNames.update({data: data});
            },
            error: function (error) {
                console.log('接口请求失败', error);
            }
        });

        $.ajax({
            url: 'GroupCsmaterialMaterialType',  // 替换为实际的接口地址
            method: 'GET',
            dataType: "json",
            async: true,
            success: function (response) {
                // 处理接口返回的数据,将其转化为xmSelect的数据格式
                for (var i = 0; i < response.length; i++) {
                    params.push({
                        name: response[i],
                        value: response[i]
                    });
                }
            },
            error: function (error) {
                console.log('接口请求失败', error);
            }
        });



        var cols = table.render({
            elem: '#tableId'
            , id: 'id'
            , url: 'SelectBom'
            , height: 'full-90'
            ,toolbar: '#toolbarDemo' //开启头部工具栏,并为其绑定左侧模板
            , page: true
            , cols: [
                [
                    {type: 'checkbox'}

                    , {
                    field: 'commodityname', title: '商品名称', templet: function (data) {
                        return data.pz_commoditysize.pz_commodity.commodityname
                    }
                }
                    , {
                    field: 'stylenumber', title: '商品款式', templet: function (data) {
                        return data.pz_commoditysize.pz_commodity.stylenumber
                    }
                }
                    , {
                    field: 'commodityitemnumber', title: '商品货号', templet: function (data) {
                        return data.pz_commoditysize.commodityitemnumber
                    }
                }
                    , {
                    field: 'colournumber', title: '颜色编码', templet: function (data) {
                        return data.pz_commoditysize.pz_colourtable.colournumber
                    }
                }
                    , {
                    field: 'pantssize', title: '尺码', templet: function (data) {
                        return data.pz_commoditysize.pz_size.pantssize
                    }
                }
                    , {
                    field: 'materialtypeMap', title: '物料类型', width: 150, event: 'materialtypeMap',
                    config: {type: 'select', data: params, cascadeSelectField: 'materialnameMap'}
                    , templet: function (data) {
                        return data.materialtypeMap && data.materialtypeMap.value ? data.materialtypeMap.value : '';
                    }
                }
                    , {
                    field: 'materialnameMap',
                    title: '物料名称',
                    width: 150,
                    event: 'materialnameMap',
                    config: {type: 'select', data: params, cascadeSelectField: 'materialnoMap'}
                    , templet: function (data) {
                        return data.materialnameMap && data.materialnameMap.value ? data.materialnameMap.value : ''
                    }
                }
                    , {
                    field: 'materialnoMap',
                    title: '物料货号',
                    width: 150,
                    event: 'materialnoMap',
                    config: {type: 'select', data: params, cascadeSelectField: 'supplierMap'}
                    , templet: function (data) {
                        return data.materialnoMap && data.materialnoMap.value ? data.materialnoMap.value : '';
                    }
                }
                    , {
                    field: 'supplierMap',
                    title: '供应商',
                    width: 150,
                    event: 'supplierMap',
                    config: {type: 'select', data: params, cascadeSelectField: 'supplieritemnumberMap'}
                    , templet: function (data) {
                        return data.supplierMap && data.supplierMap.value ? data.supplierMap.value : '';
                    }
                }
                    , {
                    field: 'supplieritemnumberMap',
                    title: '供应商货号',
                    width: 150,
                    event: 'supplieritemnumberMap'
                    ,
                    config: {type: 'select', data: params, cascadeSelectField: 'supplycolornumberMap'},
                    templet: function (data) {
                        return data.supplieritemnumberMap && data.supplieritemnumberMap.value ? data.supplieritemnumberMap.value : '';
                    }
                }
                    , {
                    field: 'supplycolornumberMap', title: '供应商色号', width: 150, event: 'supplycolornumberMap'
                    , config: {type: 'select', data: params}, templet: function (data) {
                        return data.supplycolornumberMap && data.supplycolornumberMap.name ? data.supplycolornumberMap.value : '';
                    }
                }
                    , {
                    field: 'supplierprice',
                    title: '价格',
                    width: 120,
                    event: 'supplierprice',
                    config: {
                        type: 'input', verify: {type: 'required'}
                    }, templet: function (data) {
                        return data.pzCsmaterialSupplier.supplierprice;
                    }
                }
                    , {
                    field: 'materialsize',
                    title: '单件用料',
                    width: 120,
                    event: 'materialsize',
                    config: {type: 'input', verify: {type: 'required'}}
                }
                    , {
                    field: 'lossrate',
                    title: '损耗',
                    width: 120,
                    event: 'lossrate',
                    config: {type: 'input', verify: {type: 'required'}}
                }
                    , {
                    field: 'commodityquantity',
                    title: '生产数量',
                    width: 120,
                    event: 'commodityquantity',
                    config: {type: 'input', verify: {type: 'required'}}
                }
                    , {
                    field: 'needquantity',
                    title: '需求物料数量',
                    width: 120
                }
                ]
            ]
            , parseData: function (res) {
                var result;
                if (this.page.curr) {
                    result = res.data.slice(this.limit * (this.page.curr - 1), this.limit * this.page.curr);
                } else {
                    result = res.data.slice(0, this.limit);
                }
                return {
                    "code": res.code,
                    "msg": res.msg,
                    "count": res.count,
                    "data": result
                }
            }
        }).config.cols;

        form.on('submit(sreach)', function () {
            var commodityName = commodityNames.getValue('value');
            var styleNumber=styleNumbers.getValue('value');
            console.log(commodityName)
            table.reload('tableId', {
                where: commodityNames, // 传递新的搜索条件
                styleNumbers
                // 不传页码就是不重置页码
            }, 'data');
            return false;
        })


        /**
         * 参数cols是table.render({})中的cols属性值
         * aop代理是基于event点击事件进行操作的,
         * 因此cols中务必开启event点击事件!
         **/
        var aopTable = tableEdit.aopObj(cols); //获取一个aop对象
        var trs;
        aopTable.on('tool(tableEvent)', function (obj) {
            trs = obj;
            var field = obj.field; //单元格字段
            var value = obj.value; //修改后的值
            var data = obj.data; //当前行旧数据
            var event = obj.event; //当前单元格事件属性值
            var update = {};
            update[field] = value;

            // 临时更改数据
            data.pzCsmaterialSupplier = data.pzCsmaterialSupplier || {};
            data.pzCsmaterialSupplier.supplierprice = field === 'supplierprice' ? value : data.pzCsmaterialSupplier.supplierprice;
            //把value更新到行中
            obj.update(update);


            if (['commodityquantity', 'lossrate', 'materialsize'].includes(field)) {
                var commodityquantity = field === "commodityquantity" ? parseFloat(value) : parseFloat(data.commodityquantity || 0);
                var lossrate = field === "lossrate" ? parseFloat(value) : parseFloat(data.lossrate || 0) / 100;
                var materialsize = field === "materialsize" ? parseFloat(value) : parseFloat(data.materialsize || 0);
                var needquantity = Math.round((commodityquantity * materialsize + (commodityquantity * materialsize * lossrate)) * 100) / 100;
                obj.update({needquantity: needquantity});
            }

        });


        /**
         * 级联下拉框 => 点击事件生成下拉框之前的回调函数
         * 主要用于 => 动态获取单元格下拉数据
         * tableEvent => table的lay-filter属性值
         * 如示例代码所示
         */
        // 级联下拉框点击事件生成下拉框之前的回调函数
        tableEdit.on('clickBefore(tableEvent)', function (obj) {
            var cascadeSelectData = obj.data; //级联数据
            var cascadeSelectField = obj.field; //级联字段
            if (Array.isArray(cascadeSelectData)) {
                cascadeSelectData = cascadeSelectData[0];
            }

            function fetchData(url, dataKey, requestData) {
                return $.ajax({
                    url: url,
                    method: 'GET',
                    dataType: "json",
                    traditional: true,
                    async: true,
                    data: requestData,
                    success: function (response) {
                        console.log(response)
                        var data;
                        if (response.length > 0 && typeof response[0] === 'string') {
                            // 第一种格式
                            data = response.map(function (item) {
                                return {name: item, value: item};
                            });
                        } else if (response.length > 0 && typeof response[0] === 'object') {
                            // 第二种格式
                            data = response.map(function (item) {
                                return {name: item.csmaterialid, value: item.supplycolornumber};
                            });
                        } else {
                            console.error('Unexpected response format');
                            return;
                        }

                        tableEdit.callbackFn("async(tableEvent)", {data: data, enabled: false});
                    },
                    error: function (error) {
                        console.log('接口请求失败', error);
                    }
                });
            }

            if (cascadeSelectField === "materialtypeMap") {
                fetchData('GroupCsmaterialMaterialName', 'materialtype', {materialtype: cascadeSelectData.name});
            } else if (cascadeSelectField === "materialnameMap") {
                fetchData('GroupCsmaterialMaterialNo', 'materialname', {
                    materialtype: trs.data.materialtypeMap.name,
                    materialname: cascadeSelectData.name
                });
            } else if (cascadeSelectField === "materialnoMap") {
                // 可以继续添加下一级联动的数据获取,比如'supplierMap'
                fetchData('GroupSupplier', 'materialno', {
                    materialtype: trs.data.materialtypeMap.name,
                    materialname: trs.data.materialnameMap.name,
                    materialno: cascadeSelectData.name
                });
            } else if (cascadeSelectField === "supplierMap") {
                // 可以继续添加下一级联动的数据获取,比如'supplierMap'
                fetchData('GroupSupplieritemnumber', 'supplier', {
                    materialtype: trs.data.materialtypeMap.name,
                    materialname: trs.data.materialnameMap.name,
                    materialno: trs.data.materialnoMap.name,
                    supplier:cascadeSelectData.name
                });
            }else if (cascadeSelectField === "supplieritemnumberMap") {
                // 可以继续添加下一级联动的数据获取,比如'supplierMap'
                fetchData('GroupSupplycolornumber', 'supplieritemnumber', {
                    materialtype: trs.data.materialtypeMap.name,
                    materialname: trs.data.materialnameMap.name,
                    materialno: trs.data.materialnoMap.name,
                    supplier: trs.data.supplierMap.name,
                    supplieritemnumber:cascadeSelectData.name
                });
            }
        });

        //头工具栏事件
        table.on('toolbar(tableEvent)', function(obj){
            var checkStatus = table.checkStatus(obj.config.id);
            switch(obj.event){
                case 'getCheckData':
                    layer.prompt(function(val, index){
                        var data = checkStatus.data.map(function(item) {
                            return {
                                ...item,
                                supplier: item.supplierMap.value,
                                supplieritemnumber:item.supplieritemnumberMap.value,
                                supplycolornumber:item.supplycolornumberMap.value,
                                csmaterialid:item.supplycolornumberMap.name,
                                commodityid:item.pz_commoditysize.commodityid,
                                supplierprice:item.pzCsmaterialSupplier.supplierprice,
                                throwNumber:val
                            }
                        });
                        $.ajax({
                            url: 'addProduce',  // 替换为实际的接口地址
                            method: 'POST',
                            contentType: 'application/json',
                            dataType: "json",
                            async: true,
                            data: JSON.stringify(data),
                            success: function (response) {
                                layer.close(index);
                                if(response.success===true){
                                    layer.msg('添加成功');
                                }else {
                                    layer.msg('添加失败');
                                }
                            },
                            error: function (error) {
                                layer.msg('添加失败');
                                console.log('接口请求失败', error);
                            }
                        });
                    });
                    break;
                case 'getCheckLength':
                    var data = checkStatus.data;
                    layer.msg('选中了:'+ data.length + ' 个');
                    break;
                case 'isAll':
                    layer.msg(checkStatus.isAll ? '全选': '未全选');
                    break;

                //自定义头工具栏右侧图标 - 提示
                case 'LAYTABLE_TIPS':
                    layer.alert('这是工具栏右侧自定义的一个图标按钮');
                    break;
            };
        });
    });
</script>
</html>
  • 写回答

21条回答 默认 最新

  • 一轮明月照丘壑 2024-09-27 18:13
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    从您提供的代码来看,出现了layui error hint: The table instance with ID 'tableId' not found的错误提示,这通常意味着在尝试操作一个不存在的表格实例时发生的。以下是一些可能的解决方案:

    1. 确保表格ID正确: 检查HTML中的表格元素是否有一个与您在JavaScript代码中指定的ID相匹配的ID。在这种情况下,应该是<table>标签的ID为tableId
    <table class="layui-hide" id="tableId" lay-filter="tableEvent"></table>
    

    确保您的表格元素在此处且仅有一个这样的元素,且没有拼写错误。

    1. 确保渲染的顺序: 如果您的表格是在页面加载后动态生成的或通过某种方式异步加载的,确保在尝试操作表格之前已经渲染完成。如果可能的话,您可以尝试将JavaScript代码移动到页面底部或使用某种事件监听来确保表格已经存在。
    2. 检查JavaScript代码中的其他错误: 有时其他JavaScript错误可能导致此问题。请检查浏览器的控制台以查看是否有其他JavaScript错误,并修复它们。
    3. 确保LayUI库已正确加载: 确保您已正确加载了LayUI库文件,并且没有加载冲突或版本不匹配的问题。
    4. 确保LayUI版本和API一致: 确保您使用的LayUI版本与您在代码中使用的API相匹配。有时API在不同版本中可能会有所更改。

    如果以上建议都没有解决问题,您可以提供更多关于如何初始化表格的详细代码,或者尝试创建一个简单的示例来进一步调试问题。此外,确保检查浏览器的控制台以获取更详细的错误信息或警告,这有助于诊断问题。

    评论

报告相同问题?

问题事件

  • 赞助了问题酬金15元 9月27日
  • 创建了问题 9月27日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?