【发布时间】:2021-04-14 10:07:48
【问题描述】:
我已经对此进行了一段时间的研究,但有用的信息正在枯竭而没有解决方案。
我正在使用数据表,并且在某些列中,我显示了一个选择的多选框,以允许用户在添加数据后通过继续进行选择来编辑他们的数据。
我有使用 initComplete 的每列搜索框,它们会过滤列中的数据,但不是以可接受的方式;它们在选项的文本上匹配,也在选择元素的类上匹配,甚至在所有未选择的选项上匹配,因此它是无用的。
...,
initComplete: function () {
// Apply the search
this.api().columns().every(function () {
var that = this;
$('input', this.footer()).on('keyup change clear', function () {
if (that.search() !== this.value) {
that
.search(this.value)
.draw();
}
});
});
}
我希望这仅匹配选择框的选定选项的文本。 编写函数以获取给定行中选择框的文本字符串数组很容易由我完成,但我正在努力找出在哪里可以将这样的自定义函数挂钩到 Datatables 流。
Datatables 文档提到您可以为正交数据定义列过滤器函数,但没有给出这方面的示例,我也很难在网上找到任何示例。 我的尝试是将以下内容添加到 DataTable 初始化中,但没有被调用:
...,
"columns": [
{
filter: function (a,b,c) {
console.log('called from column filter');
console.log(arguments)
return false;
}
},
{
filter: function (a,b,c) {
console.log('called to column filter');
console.log(arguments)
return false;
}
},
null
]
感谢您的宝贵时间。
更新
所以我发现我可以将一个函数推送到 $.fn.dataTable.ext.search.push(...) 上,这似乎可以满足我的需求。 沿着这条路走下去,我发现在参数中传递的 html 列不包括我需要的 Chosen 生成的元素,只是预先选择的.... 我试过使用 table.rows.invalidate.draw 但这只是从 DOM 中删除选择的元素,而不是通过让 Datatables 传入预期的 html 数据来解决这个问题。
我希望传入的实际行 html 示例:
<td>
<select class="myclasses form-control" multiple="" style="display: none;">
<option value="...">Bahamas</option>
...
</select>
<div class="chosen-container chosen-container-multi" title="" style="width: 437px;">
<ul class="chosen-choices">
<li class="search-choice">
<span>Greece</span>
<a class="search-choice-close" data-option-array-index="4"></a>
</li>
<li class="search-choice">
<span>Belgium</span>
<a class="search-choice-close" data-option-array-index="6"></a>
</li>
<li class="search-choice">
<span>France</span>
<a class="search-choice-close" data-option-array-index="7"></a></li><li class="search-field">
<input class="chosen-search-input" type="text" autocomplete="off" value="Select some options" style="width: 25px;">
</li>
</ul>
<div class="chosen-drop">
<ul class="chosen-results"></ul>
</div>
</div>
</td>
搜索调用中的实际参数数据,似乎处于预选状态。这就是为什么我希望 .invalidate() 解决这个问题...
<select class="myclasses form-control" multiple>
<option value="...">Bahamas</option>
</select>
我现在正在研究在将选择的 html 添加到表之前生成选择的 html。如果用户在将选择框选项添加到表格后对其进行更改,这可能仍然存在问题,但我会在到达那里时看到。
【问题讨论】:
标签: jquery datatables