为了账号安全,请及时绑定邮箱和手机立即绑定

即使存在,DataTables 也不会读取输入的值

即使存在,DataTables 也不会读取输入的值

翻阅古今 2021-12-23 15:58:42
服务器端模式下的数据表 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 - 当一个新的请求开始时终止 ajax 请求,这是我工作的基础。当我尝试重绘表格时 - 在用户输入#keywords-bysubstancestable输入后 - 像这样......var debouncedDraw = _.debounce(function (opts) {    bySubstancesTable.draw();    return false;}, 500);...它正在向 ajax 发出请求,/get-product-notifications.json但keywords:即使我输入了输入,请求中的参数也是空的。奇怪的是,如果我console.log($('#keywords-bysubstancestable').val())真的给出了价值。例如,如果我在输入中输入“Australia”,则console.log()语句给出:但是当查看网络选项卡中的请求时,keywords:即使发送了所有其他参数也是空的:为什么会这样?结果是表格显示了“正在加载通知...”文本,但表格中实际上没有任何变化。我不明白这一点,因为我bySubstancesTable.draw();从另一个似乎可以工作的项目中复制了它。我认为这.draw()确实是重绘表格的正确方法?
查看完整描述

1 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

您正在读取值并将值分配给keywords,而不是其expression本身,因此您的关键字始终是静态的,即初始化表时获得的值。


数据表支持function作为 的值ajax.data,它应该采用数据对象并返回修改后的数据对象。


var bySubstancesTable = $('#bySubstancesTable').DataTable({

    processing: true,

    serverSide: true,

    searching: false,

    ajax: {

        data: function (d) {

          d.list_requested = 'bySubstancesTable';  // <table> #ID

          d.keywords = $('#keywords-bysubstancestable').val(); // search keywords

          return d;

        },

        url: '/get-product-notifications.json', 

    },

    "language": {

        ...

        "processing": 'Loading notifications...'

    }


 ...


});


查看完整回答
反对 回复 2021-12-23
  • 1 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信