【发布时间】:2019-11-11 11:49:58
【问题描述】:
DataTables 1.10.18 在服务器端模式和 jquery 3.2.1
设置如下:
var bySubstancesTable = $('#bySubstancesTable').DataTable({
processing: true,
serverSide: true,
searching: false,
ajax: {
data: {
list_requested: 'bySubstancesTable', // <table> #ID
keywords: $('#keywords-bysubstancestable').val() // search keywords
},
url: '/get-product-notifications.json',
},
"language": {
...
"processing": 'Loading notifications...'
}
...
});
页面的标记有一个<input>,ID 为#keywords-bysubstancestable,后跟表格的标记:
<input type="text" id="keywords-bysubstancestable">
<table id="bySubstancesTable" class="table display table-striped responsive" cellspacing="0" width="100%">
<thead>
<tr>
<th>Date</th>
<th>ID</th>
<th>Substance Name</th>
<th>Revision</th>
<th>Affected Products</th>
</tr>
</thead>
</table>
当页面加载时,表格被正确填充。我正在尝试实现自定义搜索功能,而不是使用与 DataTables 捆绑的搜索功能。我之前问过这个问题:DataTables - kill ajax requests when a new one has started,这是我工作的基础。
当我尝试重绘表格时 - 在用户输入 #keywords-bysubstancestable 输入后 - 像这样......
var debouncedDraw = _.debounce(function (opts) {
bySubstancesTable.draw();
return false;
}, 500);
...它正在向 /get-product-notifications.json 发出 ajax 请求,但即使我输入了输入,请求中的 keywords: 参数也是空的。
奇怪的是,如果我console.log($('#keywords-bysubstancestable').val()) 它实际上是在给出价值。例如,如果我在输入中键入“澳大利亚”,console.log() 语句会给出:
但是在网络选项卡中查看请求时,keywords: 是空的,即使发送了所有其他参数:
为什么会这样?
效果是表格显示“正在加载通知...”文本,但表格中实际上没有任何变化。
我不明白这一点,因为我从另一个似乎可以工作的项目中复制了 bySubstancesTable.draw();。我认为.draw() 确实是重绘表格的正确方法?
【问题讨论】:
-
您正在获取输入的值并将其作为静态值分配给关键字,因此当您的数据表初始化时,您的输入值是空字符串,这就是请求中的内容
-
是的,当页面加载时。但是当用户在输入中输入文本时,我会调用
debouncedDraw(请参阅链接的 SO 问题)。那么它应该能够在那时阅读它吗?它在另一个应用程序中确实做到了,所以无法理解为什么它不在这个应用程序中 -
不,您正在读取值并将
value分配给关键字,而不是expression本身,因此您的关键字始终是静态的,即初始化表时获得的值。如果在初始化数据表之前设置输入值,您会更好地理解它 -
在您给出的示例中,他正在使用数据函数,如果您想动态读取输入值,则需要执行相同操作
标签: javascript jquery datatables