DataTables изменяет ширину столбцов с данными из ajax в приложении Bootstrap 3.3.7 - PullRequest
0 голосов
/ 19 октября 2018

Мое приложение использует:

  • DataTables 1.10.16
  • Bootstrap 3.3.7
  • jQuery 3.2.1

Сценарий:

Я пытаюсь добавить входные данные формы в заголовки таблицы, чтобы разрешить поиск по 2 столбцам.Это особенность моего приложения; не средство поиска, которое предоставляет DataTables.

Проблема:

Я хочу, чтобы входные данные поиска отображались на всю ширину каждого столбца.Я хочу, чтобы это выглядело так:

enter image description here

Но оно отображается так: обратите внимание, что входные данные поиска уменьшились в ширине:

enter image description here

(данные таблицы размыты из-за того, что это частное приложение).

Разметка, которую я использовалоснован на системе столбцов Bootstrap - я использовал 2 .col-md-6, поэтому элементы <th> имеют одинаковую ширину:

<table id="regulatoryInformationTable" class="table responsive display table-striped pb-25" cellspacing="0" width="100%">
    <thead>
        <th class="col-md-6">
            <div class="input-group">
                <span class="input-group-addon"><span class="glyphicon glyphicon-search"></span></span>
                <input type="text" class="form-control" placeholder="Search Regulation Name">
            </div>
        </th>
        <th class="col-md-6">
            <div class="input-group">
                <span class="input-group-addon"><span class="glyphicon glyphicon-search"></span></span>
                <input type="text" class="form-control" placeholder="Search Regulation Data">
            </div>
        </th>
    </thead>
</table>

Если я открою страницу с этой разметкой, она будет отображаться согласно первому скриншоту -но без каких-либо данных в таблице - так как я не сделал запрос ajax и не обновил DataTable на этом этапе.

Когда я делаю запрос ajax, таблица заполняется, но затем кажется, что входные данные сокращаютсяв ширину.Мой js для использования DataTables и выполнения запроса ajax выглядит следующим образом:

$(function() {

    /* Populate table of Regulatory Information */
    var regulatoryInformationTable = $('#regulatoryInformationTable').DataTable({
        "processing": true,
        "serverSide": true,
        "searching": false,
        "ajax": {
            "url": "/get-data.json",
            "method": "POST",
            "cache": false,
            "dataSrc": function (json) {
                return json.data;
            }
        },
        "columns": [
            {"data": "display_label", "name": "display_label"},
            {"data": "display_value", "name": "display_value"},
        ],
        "columnDefs": [
            {"width": "50%", "targets": 0},
            {"width": "50%", "targets": 1},
            {"orderable": false, "targets": [0,1]} // Can't order
        ],
        "paging": false, // no pagination
        "language": {
            "zeroRecords": "Sorry we no data for this substance",
            "infoFiltered": "",
            "infoEmpty": "",
            "processing": '<i class="fa fa-spinner fa-spin fa-2x fa-fw"></i>'
        }
    });   
}); 

Я использовал массив columnDefs для указания width: 50%, но это не имеет никакого значения - даже если я его удалю.

Кто-нибудь может посоветовать, как это исправить?

Ответы [ 3 ]

0 голосов
/ 25 октября 2018

я тоже столкнулся с той же проблемой пару недель назад, если вы не хотите автоматически добавлять ширину,

table {
table-layout: fixed;
width: 100%; 

}

, так что это мерцание не появится.отрегулируйте размер td из содержимого.

0 голосов
/ 26 октября 2018

Ознакомьтесь со следующим фрагментом кода, где данные работают как положено:

$(function() {
    /* Populate table of Regulatory Information */
    var regulatoryInformationTable = $('#regulatoryInformationTable').DataTable({
        "processing": true,
        "serverSide": true,
        "searching": false,
        "ajax": {
        		"url": "https://jsonplaceholder.typicode.com/albums",
            "method": "GET",
            "cache": false,
            "dataSrc": function (json) {
                return json;
            }
        },
        "columns": [
            {"data": "id", "name": "id"},
            {"data": "title", "name": "title"},
        ],
        "columnDefs": [
            {"width": "50%", "targets": 0},
            {"width": "50%", "targets": 1},
            {"orderable": false, "targets": [0,1]} // Can't order
        ],
        "paging": false, // no pagination
        "language": {
            "zeroRecords": "Sorry we no data for this substance",
            "infoFiltered": "",
            "infoEmpty": "",
            "processing": '<i class="fa fa-spinner fa-spin fa-2x fa-fw"></i>'
        }
    });   
}); 
<link href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css" rel="stylesheet"/>
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" rel="stylesheet"/>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>

<table id="regulatoryInformationTable" class="table responsive display table-striped pb-25" cellspacing="0" width="100%">
    <thead>
        <th class="col-md-6">
            <div class="input-group">
                <span class="input-group-addon"><span class="glyphicon glyphicon-search"></span></span>
                <input type="text" class="form-control" placeholder="Search Regulation Name">
            </div>
        </th>
        <th class="col-md-6">
            <div class="input-group">
                <span class="input-group-addon"><span class="glyphicon glyphicon-search"></span></span>
                <input type="text" class="form-control" placeholder="Search Regulation Data">
            </div>
        </th>
    </thead>
</table>

Отметьте это jsfiddle , если хотите.

Объяснение:

Я использовал ваш оригинальный код и изменил несколько бит, чтобы я мог опубликовать рабочую демонстрацию здесь.Единственное, что я изменил, это API для получения данных и необходимые файлы CSS и javascript.Я использую api из jsonplaceholder для демонстрации и изменил столбцы на основе структуры ответа api.

0 голосов
/ 23 октября 2018

Кажется, что DataTables устанавливает width из th в фиксированное значение.Это должно сократить входы внутри.Попробуйте отключить опцию autoWidth.Оставьте другие параметры такими, как Вы определили.

$('#regulatoryInformationTable').dataTable( {
  "autoWidth": false,
} );

Ссылка: https://datatables.net/reference/option/autoWidth

Не используйте класс начальной загрузки col-* для таблиц, пусть таблицы текут свободно, эти классы предназначены для макетов.

...