DataTables не читает значение входного даже если она существует - PullRequest
0 голосов
/ 11 ноября 2019

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> с идентификатором,#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);

... это делает запрос Аякса /get-product-notifications.json но keywords: параметр в запросе опустошить даже когда я»мы набрали input.

Что странно, что если я console.log($('#keywords-bysubstancestable').val()), это фактически дает значение. Например, если я типа «Австралия» в ввести console.log() утверждение дает это:

1026 *enter image description here 1031 * Но если смотреть по запросу на вкладке Networkkeywords: пусто даже при отправке всех остальных параметров:

enter image description here

Почему это происходит?

В результате получается, чтотаблица показывает «Загрузка уведомлений ...» текст, но ничего на самом деле не меняется в таблице.

1043 * Я не понимаю этого, потому что я скопировал bySubstancesTable.draw(); из другого проекта, в котором он появляется на работе. Я полагаю, что .draw() действительно является правильным способом перерисовки таблицы?

1 Ответ

2 голосов
/ 11 ноября 2019

Вы читаете значение и присваиваете значение keywords, а не самому expression, поэтому ваше ключевое слово всегда статическое, значение, которое оно получило при инициализации таблицы.

Поддержка Datatables 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...'
    }

 ...

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...