Строка, содержащая раскрывающийся список кнопок, вызывает вертикальную прокрутку, когда включена функция scrollX.

У меня есть таблица данных, в которой включен scrollX из-за количества отображаемых столбцов. Строки таблицы содержат раскрывающийся список кнопки начальной загрузки с несколькими элементами. При выборе раскрывающегося списка включается прокрутка, и сложно выбрать правильное действие. Как изменить размер области просмотра при выборе раскрывающегося списка, чтобы вертикальная прокрутка не отображалась?

jsfiddle — это https://jsfiddle.net/darwinaero/q9mLg375/15/.


    $(function() {

      $('#tblTest').DataTable({
        dom: 'Blfrtip',
        scrollX: true,
        paging: true,
        responsive: true
      });
    });


    <div class="container-fluid">
      <div class="row">
        <div class="col-md-12">
          <table id="tblTest">
            <thead>
              <tr>
                <th>Col1</th>
                <th>Col2</th>
                <th>Col3</th>
                <th>Col4</th>
                <th>Col5</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>some data</td>
                <td>some data</td>
                <td>some data</td>
                <td>some data</td>
                <td>
                  <div class="btn-group">
                    <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
        Action <span class="caret"></span>
      </button>
                    <ul class="dropdown-menu">
                      <li><a href="#">Action</a></li>
                      <li><a href="#">Another action</a></li>
                      <li><a href="#">Something else here</a></li>
                      <li role="separator" class="divider"></li>
                      <li><a href="#">Separated link</a></li>
                    </ul>
                  </div>
                </td>
              </tr>
            </tbody>
          </table>
        </div>
      </div>
    </div>


person Chris Jessen    schedule 30.05.2019    source источник


Ответы (3)


У вас есть три варианта, о которых я могу думать:

  1. Перезапишите overflow с помощью css и/или javascript для элемента div.dataTables_scrollBody.
  2. Установите scrollY в настройках таблицы данных на фиксированное значение (например, 600 для 600 пикселей).
  3. Напишите свой собственный раскрывающийся список, который отображает открытый раскрывающийся список вне/над элементом таблицы.

Первые два варианта могут быть реализованы довольно просто.

Вот пример для варианта 1:

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

$(function() {       
  $('#tblTest').DataTable({
    dom: 'Blfrtip',
    scrollX: true,
    paging: true,
    responsive: true
  });
  
  $('#tblTest').on('show.bs.dropdown', function () {
    $('.dataTables_scrollBody').addClass('dropdown-visible');
  })
  .on('hide.bs.dropdown', function () {
    $('.dataTables_scrollBody').removeClass('dropdown-visible');
  });
});
div.dataTables_scrollBody.dropdown-visible {
  overflow: visible !important;
}
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<link href="//cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css" rel="stylesheet"/>
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="//cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>

<div class="container-fluid">
  <div class="row">
    <div class="col-md-12">
      <table id="tblTest">
        <thead>
          <tr>
            <th>Col1</th>
            <th>Col2</th>
            <th>Col3</th>
            <th>Col4</th>
            <th>Col5</th>
            <th>Col6</th>
            <th>Col7</th>
            <th>Col8</th>
            <th>Col9</th>
            <th>Col10</th>
            <th>Col11</th>
            <th>Col12</th>
            <th>Col13</th>
            <th>Col14</th>
            <th>Col15</th>
            <th>Col16</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>some data</td>
            <td>some data</td>
            <td>
<div class="btn-group">
  <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
    Action <span class="caret"></span>
  </button>
  <ul class="dropdown-menu">
    <li><a href="#">Action</a></li>
    <li><a href="#">Another action</a></li>
    <li><a href="#">Something else here</a></li>
    <li role="separator" class="divider"></li>
    <li><a href="#">Separated link</a></li>
  </ul>
</div>
            </td>
            <td>some data</td>
            <td>some data</td>
            <td>some data</td>
            <td>some data</td>
            <td>some data</td>
            <td>some data</td>
            <td>some data</td>
            <td>some data</td>
            <td>some data</td>
            <td>some data</td>
            <td>some data</td>
            <td>some data</td>
            <td>some data</td>
          </tr>
        </tbody>
      </table>
    </div>
  </div>
</div>

person Jan    schedule 08.06.2019

Использовать атрибут data-container=body

<select data-container="body">
...
</select>

http://jsfiddle.net/IceManSpy/Y9hyD/2/

person Егор Гудков    schedule 03.08.2021

Самым простым обходным решением для меня было установить минимальную высоту для dataTables_scrollBody. Вы можете увеличить минимальную высоту в зависимости от списка элементов в раскрывающемся списке. Просто добавьте это в свою таблицу стилей.

.dataTables_scrollBody {
 min-height: 250px !important;
}
person Evans L.    schedule 13.05.2021