Как искать столбцы Dynami c в Datatable в asp. net core - PullRequest
0 голосов
/ 07 августа 2020

Следуя примеру, на https://www.datatables.net/release-datatables/examples/api/regex.html я хочу заполнить таблицу по столбцам. Глобальный поиск работает нормально, но поиск по столбцам показывает ошибку. Я думаю, что я очень хорошо следил за примером, но я думаю, что мне все еще не хватает чего-то там

Uncaught TypeError: $(...).DataTable(...).column(...).search(...).draw is not a function
    at filterColumn (Index:667)
    at HTMLInputElement.<anonymous> (Index:637)
    at HTMLInputElement.dispatch (jquery.min.js:2)
    at HTMLInputElement.v.handle (jquery.min.js:2)

Это мой код


@section Styles {
    <!-- DataTables -->
    <link rel="stylesheet" href="~/libs/datatables/css/dataTables.bootstrap.min.css">
    <link href="~/css/listedviews.css" rel="stylesheet" />

}
<script src="https://code.jquery.com/jquery-3.4.1.min.js"
        integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
        crossorigin="anonymous"></script>

@section Scripts {
    <!-- DataTables -->
    <script src="~/libs/datatables/js/jquery.dataTables.min.js"></script>
    <script src="~/libs/datatables/js/dataTable110.21.js"></script>

}
<script>
    $(document).ready(function () {
        $('#dailyload').DataTable({
            pageLength: 10,
            ajax: {
                url: '/MonthlyInterest/MonthlyDetails',
                dataSrc: ''
            },
            columns: [
                {title: 'Account No', data: 'loanAccountNo'},
                {title: 'Amount Written off',data: 'amountWrittenOff'}
            ]
        });

        $('input.global_filter').on('keyup click', function () {
            filterGlobal();
        });

        $('input.column_filter').on('keyup click', function () {
            filterColumn($(this).parents('tr').attr('data-column'));
        });
    });

    function filterGlobal() {
        $('#dailyload').DataTable().search(
            $('#global_filter').val(),
        ).draw();
    }

    function filterColumn(i) {
        $('#dailyload').DataTable().column(i).search(
            $('#col' + i + '_filter').val()
        ).draw();
    }
</script>

<div class="container">
    <div class="row">
        <div class="box">
            <div class="box-header">
            </div>

            <div class="box-body" style="padding-right: 80px">
                <div style="background-color:#f5f5f5; padding:20px">
                    <h2>Search Panel</h2>
                    <table>
                        <tbody>
                            <tr>
                                <td>Employee Name</td>
                                <td align="center"><input type="text" class="global_filter" id="global_filter"></td>
                                <td align="center"><input type="text" class="column_filter" id="col0_filter"></td>
                            </tr>
                        </tbody>
                    </table>
                </div>
                <table id="dailyload" class="table table-striped">
                </table>
            </div>
        </div>
    </div>
</div>

1 Ответ

1 голос
/ 07 августа 2020

На самом деле вы были довольно близки.

Вы забыли включить второй фильтр в отдельную строку и включить атрибут data-column в его тег tr . Это ваш исходный код:

<tr>
    <td>Employee Name</td>
    <td align="center"><input type="text" class="global_filter" id="global_filter"></td>
    <td align="center"><input type="text" class="column_filter" id="col0_filter"></td>
</tr>

И вот как вы должны это делать:

<tr>
    <td>Employee Name</td>
    <td align="center"><input type="text" class="global_filter" id="global_filter"></td>
</tr>
<tr data-column="0">
    <td>Another Filter</td>
    <td align="center"><input type="text" class="column_filter" id="col0_filter"></td>
</tr>

Посмотрите на мой пример:

var jsonData = [
  { 
     "loanAccountNo": "500507082020",
     "amountWrittenOff": "$320,800"
  },
  { 
     "loanAccountNo": "308205105020",
     "amountWrittenOff": "$170,750"
  },
  { 
     "loanAccountNo": "120205205070",
     "amountWrittenOff": "$186,800"
  }
];

$(document).ready(function () {
  $('#dailyload').DataTable({
    pageLength: 10,
    /*ajax: {
      url: '/MonthlyInterest/MonthlyDetails',
      dataSrc: ''
    },*/
    data: jsonData,
    columns: [
      {title: 'Account No', data: 'loanAccountNo'},
      {title: 'Amount Written off',data: 'amountWrittenOff'}
    ]
  });

  $('input.global_filter').on('keyup click', function () {
    filterGlobal();
  });

  $('input.column_filter').on('keyup click', function () {
    filterColumn($(this).parents('tr').attr('data-column'));
  });
});

function filterGlobal() {
  $('#dailyload').DataTable().search(
    $('#global_filter').val(),
  ).draw();
}

function filterColumn(i) {
  $('#dailyload').DataTable().column(i).search(
    $('#col' + i + '_filter').val()
  ).draw();
}

/*function filterColumn2(i) {
  $('#dailyload').DataTable().columns(i).search(
    $('#col' + i + '_filter').val()
  ).draw();
}*/
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<link href="https://cdn.datatables.net/1.10.21/css/jquery.dataTables.min.css" rel="stylesheet"/>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://cdn.datatables.net/1.10.21/js/jquery.dataTables.min.js"></script>

<div class="container">
  <div class="row">
    <div class="box">
      <div class="box-header">
      </div>

      <div class="box-body" style="padding-right: 80px">
        <div style="background-color:#f5f5f5; padding:20px">
          <h2>Search Panel</h2>
          <table>
          <tbody>
            <tr>
              <td>Employee Name</td>
              <td align="center"><input type="text" class="global_filter" id="global_filter"></td>
            </tr>
            <tr data-column="0">
              <td>Another Filter</td>
              <td align="center"><input type="text" class="column_filter" id="col0_filter"></td>
            </tr>
          </tbody>
          </table>
        </div>
        <br>
        <table id="dailyload" class="table table-striped">
        </table>
      </div>
    </div>
  </div>
</div>

Кстати, в моей первой попытке у меня была такая же проблема (то же сообщение об ошибке), и я изменил эту строку:

 $('#dailyload').DataTable().column(i).search(

Для этого:

 $('#dailyload').DataTable().columns(i).search(

И наконец все заработало как положено. Обратите внимание на дополнительные s в столбцах .

Но затем я снова попытался удалить s столбцом ), и вдруг, к моему удивлению, он заработал. Странный глюк, может быть?

Удачного кодирования!

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