【问题标题】:DataTable with dropdown Column带有下拉列的数据表
【发布时间】:2016-07-02 02:02:51
【问题描述】:

我需要在 DataTable jQuery 中将下拉列表设为列,它现在看起来如下所示

我想要如下图所示

我使用的代码是

<table id="example" class="hover row-border dataTable" role="grid" width="100%">
    <thead class="dataTableHeader">
        <tr>
            <th>Days</th>
            <th>Start Time</th>
            <th>End Time</th>
        </tr>
    </thead>
</table>

$(document).ready(function () {
    $('#example').DataTable({
        "aaData": OrganizationData.OrganizationPreference.ScheduleDaysCol,
        "columns": [
            {"data": "DayName"},
            {"data": "StartDateHour"},
            {"data": "EndDateHour"}

        ],
        "paging": false,
        "ordering": false,
        "info": false,
        "filter": false
    });
});

【问题讨论】:

    标签: javascript jquery html twitter-bootstrap datatables


    【解决方案1】:

    另一种方法是使用render 方法:

            "render": function(d,t,r){
                var $select = $("<select></select>", {
                    "id": r[0]+"start",
                    "value": d
                });
                $.each(times, function(k,v){
                    var $option = $("<option></option>", {
                        "text": v,
                        "value": v
                    });
                    if(d === v){
                        $option.attr("selected", "selected")
                    }
                    $select.append($option);
                });
                return $select.prop("outerHTML");
            }
    

    工作example

    【讨论】:

    • 什么是函数中的 d,t,r
    • d,t,r, 是传递给渲染函数的参数,还有一个叫meta。按照顺序,d 是单元格中的数据,t 是数据类型,r 是整行。查看此页面了解更多 DataTable 的优点:datatables.net/reference/option/columns.render
    • 就像@Tanmay 的回答一样。 columnscolumnDefs 数组允许您单独处理每列数据。 data 键告诉 DataTables 在相关单元格中放入什么,render 键告诉 DataTables 如何显示它。真是相当聪明!
    • ....我的数据表 databasetable-net.000webhostapp.com 使用 columnDefs 而不是列和服务器端,因此可能需要在某个时候发布一个单独的主题...如果我这样做会告诉你..跨度>
    • 所以服务器端确实可以使用您的模板。我可能会发布一个单独的解决方案,这样我以后就不会丢失它(并让其他人看到)。
    【解决方案2】:

    您可以使用这种方式然后进行下拉设置

     "aaData": OrganizationData.OrganizationPreference.ScheduleDaysCol,
                            "columnDefs": [{ "targets": 0,"data": "DayName" },
                                {
                                "targets": 1,
                                "data": "StartDateTime",
                               "render": function (data, type, full, meta) {
                                        var $select = $("<select></select>", {
                                        });
                                        $.each(times, function (k, v) {
    
                                            var $option = $("<option></option>", {
                                                "text": v,
                                                "value": v
                                            });
                                            if (data === v) {
                                                $option.attr("selected", "selected")
                                            }
                                            $select.append($option);
                                        });
                                        return $select.prop("outerHTML");
                                }
    

    【讨论】:

      【解决方案3】:

      DataTables 似乎为 Samyukta 和其他人所引用的这种类型的东西提供了一个编辑器:https://editor.datatables.net/examples/inline-editing/simple

      我会说这是最简单的答案。但是,它是一个商业扩展,仅提供免费试用。

      如果您想要一些 jquery 代码来简单地将静态时间更改为下拉框,您可以试一试:

      //utility functions to get half-hour increment lists
      function getTimeList(){
          var iterations = 48;
          var result = [];
          for(int i = 0; i < iterations; i++){
              var hour = Math.floor(i / 2);
              var minute = (i % 2) > 0 ? '30' : '00';
              result.push(hour + ':' + minute);
          }
          return result;
      }
      
      function getOptionTimeList(){
          var raw = getTimeList();
          var iterations = raw.length;
          var result = '';
          for(int i = 0; i < iterations; i++){
              result = result + '<option>' + raw[i] + '</option>';
          }
          return result;
      }
      
      
      //I'm using the not selector to avoid changing the days into dropdown by accident
      $('#example tbody tr td:not(#example tbody tr:first-child)').each(
          function(index, element){
              var value = element.innerHTML;
              var optionList = getOptionTimeList();
              var replacement = '<td><select>' + optionList + '</select></td>';
      
      
              $(element).replaceWith(replacement)
          }
      );
      

      这应该会为您提供所需的下拉框。如果你有问题,我会修改它。

      【讨论】:

        【解决方案4】:

        你可以试试这个,我现在用的就是这个。

        https://github.com/ejbeaty/CellEdit

        看这个例子:

        "inputTypes": [
                    {
                        "column":0, 
                        "type":"text", 
                        "options":null 
                    }, 
                    {
                        "column":1, 
                        "type": "list",
                        "options":[
                            { "value": "1", "display": "Beaty" },
                            { "value": "2", "display": "Doe" },
                            { "value": "3", "display": "Dirt" }
                        ]
                    }
        

        希望对某人有所帮助。

        【讨论】:

          猜你喜欢
          • 2016-07-06
          • 2015-02-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-25
          • 1970-01-01
          相关资源
          最近更新 更多