我已经研究了一段时间,但有用的信息正在枯竭,没有解决方案。
我正在使用Datatables,在某些列中,我正在显示一个Chosen多选框,以允许用户在添加数据后通过继续进行选择来编辑其数据。 我已经使用initComplete使每列的搜索框工作了,它们确实可以过滤列中的数据,但方式不太可接受。它们匹配选项的文本,还匹配选择元素的类,甚至匹配所有未选择的选项,因此毫无用处。
我希望这只匹配所选选项的文本,而不是整个选择框中的文本。 编写函数以获取给定行中选择框的文本字符串数组很容易,但我正在努力找出在Datatables流程中可以挂接这样的自定义函数的位置。 Datatables文档提到,您可以为正交数据定义列过滤器函数,但没有给出示例,我也很难在网上找到任何示例。 我尝试将以下内容添加到DataTable初始化中,但没有被调用:
搜索调用中的实际参数数据似乎处于预选状态。这就是为什么我期望 .invalidate() 可以解决这个问题的原因...
我正在使用Datatables,在某些列中,我正在显示一个Chosen多选框,以允许用户在添加数据后通过继续进行选择来编辑其数据。 我已经使用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中删除了Chosen元素,而没有通过使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。如果用户在将选项添加到表格后更改选择框选项,可能仍会出现问题,但我会等到那时再看。