Javascript 数据表:单元格中的下拉列表
我正在尝试用Datatables生成一个表 我从我的控制器收到一个json,下面是一个示例: 这个json可以更改(列数、列名),我可以用正确的列数和名称构建表 我的问题是: 当“liste”有一个数组和一个空的简单输入时,我怎么能有一个下拉列表呢 有可能吗 编辑: 我忘了解释一些事情。我收到的Json是用于构建表而不是填充表的Json。因此,是否可以在数据进入单元格之前执行columnsDef 编辑编号2: 我使用了我接受的解决方案,但问题在于我的json。我试图发送一个json来构建,并发送一个json来填充表。因此,我更改了json,并发送json中的选项列表来填充表 希望它能帮助其他人Javascript 数据表:单元格中的下拉列表,javascript,symfony,datatables,Javascript,Symfony,Datatables,我正在尝试用Datatables生成一个表 我从我的控制器收到一个json,下面是一个示例: 这个json可以更改(列数、列名),我可以用正确的列数和名称构建表 我的问题是: 当“liste”有一个数组和一个空的简单输入时,我怎么能有一个下拉列表呢 有可能吗 编辑: 我忘了解释一些事情。我收到的Json是用于构建表而不是填充表的Json。因此,是否可以在数据进入单元格之前执行columnsDef 编辑编号2: 我使用了我接受的解决方案,但问题在于我的json。我试图发送一个json来构建,并发
谢谢这里有两个解决方案: 1) 使用下拉列表 2) 使用格式化数组(作为替代) 1) 带下拉菜单 最终结果如下所示: datatables定义如下:
<script type="text/javascript">
var dataSet = { "records" : [
{ "data" : "123456789",
"liste" : null,
"name" : "Nombre Enfants"
},
{ "data" : "5678901234",
"liste" : [ "Oui", "Non" ],
"name" : "Transport"
}]};
$(document).ready(function() {
$('#example').DataTable( {
data: dataSet.records,
columnDefs: [
{ targets: [ 0 ],
title: "Data",
data: "data" },
{ targets: [ 1 ],
title: "Liste",
data: function ( row ) {
if (row.liste == null) {
return null;
} else {
return buildDropdown(row.liste);
}
} },
{ targets: [ 2 ],
title: "Name",
data: "name" }
]
} );
function buildDropdown(data) {
var dropdown = "<select>";
for (var i = 0; i < data.length; i++) {
var option = "<option value=\"" + data[i] + "\">" + data[i] + "</option>";
dropdown = dropdown + option;
}
dropdown = dropdown + "</select>";
return dropdown;
}
} );
</script>
具体来说,[,]
符号允许您格式化数组数据
我之所以提到这一点,是因为它允许您显示单元格中的所有数组数据,而不是单击下拉列表。但这只是一个建议
您可能会发现,使用此选项,搜索和排序等其他功能会更好
更新
问题已经澄清,表需要根据JSON中提供的数据动态构建
您可以将变量传递给datatables初始值设定项-例如:
var col1 = { targets: [ 0 ], title: "Data", data: "data" };
var col2 = { targets: [ 1 ], title: "Liste", data: "liste" };
var col2 = { targets: [ 2 ], title: "Name", data: "name" };
var dynamicCols = [ col1, col2, col3 ];
上面的col1
变量定义了列的标题,以及列从哪里获取数据(从dataSet.data
字段)
dynamicCols
变量可以在columnDefs
中使用,如下所示:
$(document).ready(function() {
$('#example').DataTable( {
data: dataSet.records,
columnDefs: dynamicCols
} );
但是,我不知道如何使用这种方法在columndef中包含函数(例如,如果需要,将单元格数据显示为下拉列表)
还有一些附加的技术可以用来使数据表更具动态性——例如,在线提供了几个示例。在没有看到提供JSON的更详细示例的情况下,我不确定是否还有其他建议。谢谢您的回答。但是,我的问题是我无法知道目标,因为有时一列有输入,但有时同一目标是一列有数组。所以我不能这么做。@C.Ramp-好的-在这种情况下,你可以对每一列使用我的方法,而不是一列。如果这仍然没有帮助,那么我想我不理解这种情况-对此感到抱歉。也许您可以在您的问题中提供更多的JSON示例,以澄清?关于注释“JSON构建表而不是填充表”,是的,您可以动态构建
columnsDef
。请参阅我最新答案的底部。但我怀疑这仍然不能让你找到解决方案。也许它会给你一些想法。
$(document).ready(function() {
$('#example').DataTable( {
data: dataSet.records,
columnDefs: dynamicCols
} );