python测试开发django-164.bootstrap-table 单元格添加select下拉框

前言

接着前一篇https://www.cnblogs.com/yoyoketang/p/15478790.html,实现单元格添加select下拉框。

table表格

html代码很简单,点个添加一行的按钮,一个提交按钮

<div>
  <div>
      <input onclick="add_validate_row('table')" type="button" class="btn btn-info" value="+ 添加">
  </div>
  <table id="table" class="table"></table>
  <div>
      <input id="save" type="button" class="btn btn-info" value="点我提交">
  </div>
</div>

select 下拉框字段是 comparator,数据通过ajax请求先获取

<script>
// 读取校验方式
var Comparator;
$.ajax({
    type: "GET",
    dataType: "JSON",
    async: false,
    url: '/api/comparator/',
    success: function (result) {
          Comparator = result.rows
    },
    error: function (jqXHR, textStatus, e) {
         console.log("comparator数据异常:"+e);
    }
})
</script>

bootstrap-table 表格初始化

// 点添加一行
function add_validate_row(table_name){
        var tab = '#'+table_name;
        var count = $(tab).bootstrapTable('getData').length;
        // 表格添加一行
        $(tab).bootstrapTable('insertRow', {index:count,row:{'id':count, 'check': '', 'comparator':'',  'expect': ''}});
}

// table表格初始化
function table_validate_edit(table_name){
    window.operateEvents = {
        'click #rowDel': function (e, value, row, index) {
            $('#'+table_name).bootstrapTable('remove', {
                field: 'id',
                values: [row.id]
            });
        }
    };
    // 设置行样式
    function rowStyle(row, index) {
        return {css:
                 {'color':'black',
                  'padding': '0px'
                }
        }
    }

    var columns = [
            {
                checkbox: true,
                visible: true    //是否显示复选框
            },
            {
                field: 'check',
                title: 'Check',
                formatter: function (value, row, index) {
                            return '<input style="font-size:24px; line-height:33px; height: 100%; width:100%; overflow: hidden; border: none" type="text" id="check' +index + '" value="'+value+ '" >';
                        },
                cellStyle: function (value, row, index) {
                            return {
                                css: {
                                    "min-width": "100px",
                                    "white-space": "nowrap",
                                    "text-overflow": "ellipsis",
                                    "overflow": "hidden",
                                    "max-width": "100px",
                                    'padding': '0px'
                                }
                            }
                        }
            },
            {
                field: 'comparator',
                title: 'Comparator',
                width: '150px',
                formatter: typeSelect,
                cellStyle: function (value, row, index) {
                            return {
                                css: {
                                    "min-width": "40px",
                                    "white-space": "nowrap",
                                    "text-overflow": "ellipsis",
                                    "overflow": "hidden",
                                    "max-width": "50px",
                                    'padding': '0px'
                                }
                            }
                        }
            },
            {
                field: 'expect',
                title: 'Expect',
                formatter: function (value, row, index) {
                            return '<input style="font-size:24px; line-height:33px; height: 100%; width:100%; overflow: hidden; border: none" type="text" id="expect' +index + '" value="'+value+ '">';
                        },
                cellStyle: function (value, row, index) {
                            return {
                                css: {
                                    "min-width": "100px",
                                    "white-space": "nowrap",
                                    "text-overflow": "ellipsis",
                                    "overflow": "hidden",
                                    "max-width": "100px",
                                    'padding': '0px'
                                }
                            }
                        }
            },
             {
                field: 'button',
                title: '操作',
                width: '20%',
                events: operateEvents,
                formatter: operateFormatter
            }

    ];
    data = [
        {'id': 0, 'check': '', 'comparator':'',  'expect': ''}
    ];
    $("#"+table_name).bootstrapTable({
        cache: false,
        classes: "table table-bordered table-condensed",
        columns: columns,                 //列参数
        data: data,
        clickEdit: true,
        onClickCell: function(field, value, row, $element) {
                var index = $element.parent().data('index');
                var cell_id = '#' + field+index;
                $cell = $element.find(cell_id); //查找元素
                $cell.blur(function(){
                    // 输入框失去焦点,保存表格数据
                    if (field == 'comparator'){
                        var newValue = $element.find(cell_id).val();
                        // 更新表格数据
                        row[field] = newValue;
                    }
                    else {
                        var newValue = $element.find(cell_id).val();
                        // 更新表格数据
                        row[field] = newValue;
                        // 添加comparator
                        com = '#comparator'+index;
                        row['comparator'] = $(com).val()
                    }
                });
            }
    });


    function operateFormatter(value, row, index) {
        return [
            '<button type="button" style="margin: 6px;" class="btn btn-xs btn-danger" id="rowDel">删除</button>'
        ].join('');
    }
}

// table 表格的选择框选择
function typeSelect (value, row, index) {
    var strHtml = "";
    strHtml += "<select id='comparator" + index +"' class='form-control'>";
    types = Comparator;
    d = Comparator.length;
    if (d < 1){
        strHtml += "<option value='' >请选择</option>";
    }
    else {
        for (var i = 0; i < d; i++) {
            var code = types[i].comparator;
            strHtml += "<option value='" + code + "'>" + code + "</option>";

        }
    }
    return strHtml

}

调用上面方法

<script>
table_validate_edit("table")

// 点击保存
$('#save_api').click(function(){
    rows = $("#table").bootstrapTable('getData');
    alert(JSON.stringify(rows))
})
</script>

实现效果

提交获取表格数据

更新备注:这种方式实现会有一些bug,后来换了https://www.cnblogs.com/yoyoketang/p/15566128.html

posted @ 2021-10-30 17:17  上海-悠悠  阅读(419)  评论(0编辑  收藏  举报