【问题标题】:Dynamically creating checkboxes based on the columns in a table根据表中的列动态创建复选框
【发布时间】:2016-03-15 17:53:32
【问题描述】:

我希望动态创建复选框,选中时将显示/隐藏表格中的列。我知道您可以在每个复选框中硬编码,但是如果有大量列,有没有办法动态构建它们?我只是使用下面的示例数据。这是我目前所拥有的:

复选框:

<div id="ProfColList">
    <ul style="float:right;text-align:right; list-style-type:none;">
        <li>Label  <input type="checkbox" name="C1" id="C1" value="true" /></li>
        <li>2014  <input type="checkbox" name="C2" id="C2" value="true" /></li>
        <li>2013  <input type="checkbox" name="C3" id="C3" value="true" /></li>
        <li>2012  <input type="checkbox" name="C4" id="C4" value="true" /></li>
        <li>2011  <input type="checkbox" name="C5" id="C5" value="true" /></li>
    </ul>
</div>

Jquery 显示/隐藏列:

$('#C1').change(function () {
        var grid = $("#ProfGrid").data("kendoGrid");
        if (this.checked) {
            grid.showColumn("C1");
        }
        else {
            grid.hideColumn("C1");
        }
    });
    $('#C2').change(function () {
        var grid = $("#ProfGrid").data("kendoGrid");
        if (this.checked) {
            grid.showColumn("C2");
        }
        else {
            grid.hideColumn("C2");
        }
    });
    $('#C3').change(function () {
        var grid = $("#ProfGrid").data("kendoGrid");
        if (this.checked) {
            grid.showColumn("C3");
        }
        else {
            grid.hideColumn("C3");
        }
    });
    $('#C4').change(function () {
        var grid = $("#ProfGrid").data("kendoGrid");
        if (this.checked) {
            grid.showColumn("C4");
        }
        else {
            grid.hideColumn("C4");
        }
    });
    $('#C5').change(function () {
        var grid = $("#ProfGrid").data("kendoGrid");
        if (this.checked) {
            grid.showColumn("C5");
        }
        else {
            grid.hideColumn("C5");
        }
    });

这是构建表格的代码。我正在使用 Kendo UI,所以如果它有执行此过程的功能,请告诉我:

    var gridColumns = [
        { "field": "C1", "title": "Label", "width": "15%" },
        { "field": "C2", "title": "2014", "width": "15%" },
        { "field": "C3", "title": "2013", "width": "15%" },
        { "field": "C4", "title": "2012", "width": "15%" },
        { "field": "C5", "title": "2011", "width": "15%" }
    ];


    $("#ProfGrid").kendoGrid({
        dataSource: {
            data: GridData.Data,
            pageSize: 20
        },
        height: ProfGridHeight,
        scrollable: { virtual: true },
        groupable: true,
        sortable: true,
        reorderable: true,
        resizable: true,
        pageable: {
            refresh: true,
            pageSizes: true,
            buttonCount: 5
        },
        columns: gridColumns

    });

谢谢。 基本上,如果一个表中恰好有 20 列,有没有办法为每一列生成一个复选框,而无需硬编码?

【问题讨论】:

    标签: javascript jquery kendo-grid tabular


    【解决方案1】:

    假设复选框名称将匹配列名称,您可以尝试:

    $("#ProfColList input[type=checkbox]").change(function() {
        var grid = $("#ProfGrid").data("kendoGrid");
        var columnName = this.name;
    
        if (this.checked) {
            grid.showColumn(columnName);
        }
        else {
            grid.hideColumn(columnName);
        }
    });
    

    要在 gridColumns 数组初始化后生成列。 (请注意,对于复选框,您不使用“值”属性):

    for (var i = 0; i < gridColumns.length; i++) {
        $("#ProfColList ul").append("<li>" + gridColumns[i].title + " <input type='checkbox' name='" + gridColumns[i].field + "' checked /></li>");
    }
    

    【讨论】:

    • 确实可以正常工作,但我是否仍需要在 html 中为每列硬编码一个单独的复选框?
    • 这正是我所需要的!感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    相关资源
    最近更新 更多