Django:每点击一次就增加行可输入的表格

 1             <div class="layui-form-item">
 2                 <!--项目里程碑-->
 3                 <div class="layui-collapse lcb">
 4                     <div class="layui-colla-item">
 5                         <div class="layui-colla-title">自定义SKU属性</div>
 6                         <div class="layui-colla-content layui-show">
 7                             <div class="layui-form-text">
 8                                 <div class="layui-input-block" id="sku_tab" style="margin-left: 0px;">
 9                                     <div class="layui-form-item" style="margin-bottom: 0px;">
10                                         <button type="button" class="layui-btn " onclick="addskuRow()"> <i class="layui-icon"></i>新增加一行</button>
11                                         <button type="button" class="layui-btn layui-btn-danger" onclick="getCheckRow()"> <i class="layui-icon"></i>删除被选行</button>
12                                     </div>
13                                     <input type="hidden" id="skuList" name="skuList" value="{{skuList}}">
14                                     <table id="sku_table" class="layui-table" style="width: 100%; margin: 0;"></table>
15                                 </div>
16                             </div>
17                         </div>
18                     </div>
19                 </div>
20             </div>
    <script type="text/javascript">
        $(document).ready(function(){
            $("#addForm input").addClass("layui-input");
            $("#addForm textarea").addClass("layui-input");
            $("#addForm select").addClass("layui-input");
        });

        layui.use(['form', 'element'], function(){
            var form = layui.form; //只有执行了这一步,部分表单元素才会自动修饰成功
            var element = layui.element;
            form.render();
            element.init();
        });
        layui.use(['form', 'table'], function(){
            var table = layui.table;
            var form = layui.form; //只有执行了这一步,部分表单元素才会自动修饰成功
            table.render({
                elem: '#sku_table',
                limit:10000,
                cols: [[ //表头
                    {type:'checkbox', width:'2%'},
                    {title: '序号', type:'numbers', width:'3%'},
                    {field: 'name', title: 'SKU字段', width:'25%',  templet: function (data) {
                            return ' <input class="layui-input" name="name" maxlength="50" lay-verify="required" onchange="skuTableChange(this)" autocomplete="off" value="'+data.name+'" title="'+data.name+'">';
                        }},
                    {field: 'unit', title: '单位', width:'10%',  templet: function (data) {
                            return ' <input class="layui-input" name="unit" maxlength="50" lay-verify="required" onchange="skuTableChange(this)" autocomplete="off" value="'+data.unit+'"  title="'+data.unit+'">';
                        }},
                    {field: 'type', title: '类型', width:'15%', templet: function (data) {
                            var html = '<select name="type" lay-verify="required" lay-filter="filter">';
                                if(data.type == 0){
                                    html += '<option value="0" selected>直接显示描述</option>';
                                    html += '<option value="1">叠加计费留空</option>';
                                }else{
                                    html += '<option value="0">直接显示描述</option>';
                                    html += '<option value="1" selected>叠加计费留空</option>';
                                }
                                html += '</select>';
                            return html;
                        }},
                    {field: 'billingRules', title: '计费规则', width:'20%',templet: function (data) {
                            var html = "";
                            if(data.type == 1){
                                html = ' <input class="layui-input" type="number" name="billingRules" maxlength="50" lay-verify="required" onchange="skuTableChange(this)" autocomplete="off" value="'+data.billingRules+'"  title="'+data.billingRules+'">';
                            }
                            return html;
                        }},
                    {field: 'description', title: '描述', width:'20%',templet: function (data) {
                            return ' <input class="layui-input" name="description" maxlength="50" lay-verify="required" onchange="skuTableChange(this)" autocomplete="off" value="'+data.description+'"  title="'+data.description+'">';
                        }}
                ]],
                data:JSON.parse($("#skuList").val()),
                done: function (res, curr, count) {
                    //修改一些css样式, 这里虽然能够使用, 但是还是不太友好, 努力中...
                    var cells = document.querySelectorAll('.layui-table-cell');
                    for(var i = 0 ; i < cells.length ; i++ ){
                        cells[i].style.height = 'auto';
                    }
                    form.on('select(filter)', function(data){
                        console.log(data.elem); //得到select原始DOM对象
                        console.log(data.value); //得到被选中的值
                        console.log(data.othis); //得到美化后的DOM对象
                        skuTableChange(data.elem);
                    });
                },
            });
        });

        function addskuRow(){
            var sNum = $("div[lay-id='sku_table'] .layui-table-main").scrollTop();
            var select = [];
            var skuData = JSON.parse($("#skuList").val());
            $('tr input[type="checkbox"]').each(function(index){
                if($(this).is(':checked')){
                    select.push(index);
                }
            });
            skuData.push({"name": "","unit": "","type": 0, "billingRules": "", "description": ""});
            layui.table.reload('sku_table', {data:skuData});
            for(var i=0; i<select.length; i++){
                $('tr input[type="checkbox"]:eq('+select[i]+')').prop('checked', true);
                $('tr input[type="checkbox"]:eq('+select[i]+')').next().addClass('layui-form-checked');
            }
            $('tr input[type="checkbox"]:eq(0)').prop('checked', false);
            $('tr input[type="checkbox"]:eq(0)').next().removeClass('layui-form-checked');
            $("#skuList").val(JSON.stringify(skuData));
            $("div[lay-id='sku_table'] .layui-table-main").get(0).scrollTop = sNum;
        }

        function getCheckRow() {
            var skuDataNew = []
            var isAllSelect = $("input[name=layTableCheckbox]:eq(0)").is(':checked');
            var skuData = JSON.parse($("#skuList").val());
            $("input[name=layTableCheckbox]").each(function(index){
                if(index > 0 && !$(this).is(':checked')){
                    skuDataNew.push(skuData[index-1]);
                }
            });
            layui.table.reload('sku_table', {data:skuDataNew});
            $("#skuList").val(JSON.stringify(skuDataNew));
        }

        function skuTableChange(obj){
            var sNum = $("div[lay-id='sku_table'] .layui-table-main").scrollTop();
            var select = [];
            var skuData = JSON.parse($("#skuList").val());
            $('tr input[type="checkbox"]').each(function(index){
                if($(this).is(':checked')){
                    select.push(index);
                }
            });
            var index = $(obj).closest("tr").index();
            if($(obj).attr("name") == "name"){
                skuData[index]['name'] = $(obj).val();
            }else if($(obj).attr("name") == "unit"){
                skuData[index]['unit'] = $(obj).val();
            }else if($(obj).attr("name") == "type"){
                skuData[index]['type'] = $(obj).val();
            }else if($(obj).attr("name") == "billingRules"){
                skuData[index]['billingRules'] = $(obj).val();
            }else if($(obj).attr("name") == "description"){
                skuData[index]['description'] = $(obj).val();
            }
            layui.table.reload('sku_table', {data:skuData});
            for(var i=0; i<select.length; i++){
                $('tr input[type="checkbox"]:eq('+select[i]+')').prop('checked', true);
                $('tr input[type="checkbox"]:eq('+select[i]+')').next().addClass('layui-form-checked');
            }
            $("#skuList").val(JSON.stringify(skuData));
            $("div[lay-id='sku_table'] .layui-table-main").get(0).scrollTop = sNum;
        }

 

posted @ 2020-12-08 17:07  就叫我老管吧  阅读(726)  评论(0编辑  收藏  举报