即使存在,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 - 当一个新的请求开始时终止 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()语句给出:

http://img.mukewang.com/61c42c4f0001e7d202870039.jpg

但是当查看网络选项卡中的请求时,keywords:即使发送了所有其他参数也是空的:

http://img4.mukewang.com/61c42c5c0001564502170148.jpg

为什么会这样?

结果是表格显示了“正在加载通知...”文本,但表格中实际上没有任何变化。

我不明白这一点,因为我bySubstancesTable.draw();从另一个似乎可以工作的项目中复制了它。我认为这.draw()确实是重绘表格的正确方法?


翻阅古今
浏览 119回答 1
1回答

沧海一幻觉

您正在读取值并将值分配给keywords,而不是其expression本身,因此您的关键字始终是静态的,即初始化表时获得的值。数据表支持function作为 的值ajax.data,它应该采用数据对象并返回修改后的数据对象。var bySubstancesTable = $('#bySubstancesTable').DataTable({&nbsp; &nbsp; processing: true,&nbsp; &nbsp; serverSide: true,&nbsp; &nbsp; searching: false,&nbsp; &nbsp; ajax: {&nbsp; &nbsp; &nbsp; &nbsp; data: function (d) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; d.list_requested = 'bySubstancesTable';&nbsp; // <table> #ID&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; d.keywords = $('#keywords-bysubstancestable').val(); // search keywords&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return d;&nbsp; &nbsp; &nbsp; &nbsp; },&nbsp; &nbsp; &nbsp; &nbsp; url: '/get-product-notifications.json',&nbsp;&nbsp; &nbsp; },&nbsp; &nbsp; "language": {&nbsp; &nbsp; &nbsp; &nbsp; ...&nbsp; &nbsp; &nbsp; &nbsp; "processing": 'Loading notifications...'&nbsp; &nbsp; }&nbsp;...});
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript