【问题标题】:How to do a Datatable filterby when redirecting the user to the filtered datatable将用户重定向到过滤后的数据表时如何进行数据表过滤
【发布时间】:2023-04-10 13:26:01
【问题描述】:

在我的网站中,我有一个管理面板,可将用户重定向到数据表。 我希望在用户通过单击面板中提供过滤选项的链接进行重定向时过滤和显示数据表。 我尝试了一些方法,但没有给我任何结果。

管理面板上的链接:

<a href="listings/action=filterByState&status=DRAFT" class="small-box-footer">
    More info <i class="fa fa-arrow-circle-right"></i>
</a>

数据表过滤选项:

 <select id="status" name="status" class="form-control">
    <option value="ALL">All</option>
    <option value="<?php echo(ListingStatus::PUBLISHED); ?>">
      <?php echo(ListingStatus::PUBLISHED); ?></option>
    <option value="<?php echo(ListingStatus::DRAFT); ?>">
      <?php echo(ListingStatus::DRAFT); ?></option>
    <option value="<?php echo(ListingStatus::SCHEDULED); ?>">
      <?php echo(ListingStatus::SCHEDULED); ?></option>
 </select>

AJAX 调用数据表过滤器选项:

function filterListingsByStatus(){
    $("#listingTbl").DataTable().destroy();

    var filterStatus = $("#status").val();

    $('#listingTbl').DataTable({
        "serverSide": true,
        "processing": true,
        "ordering": false,
        "searchDelay": 1000,
        "ajax": "listing-controller.php?action=filterByState&status="+filterStatus,
        "columns": [
            {"data": "id", "visible": false},
            {"data": "title"},
            {"data": "categories"},
            {"data": "tags"},
            {"data": "status"},
            {"data": "ext_ref_id"},
            {
                mRender: function (data, type, row) {
                    var linkEdit = '<a href="edit-listing.php?id=listingId">Edit</a>';
                    linkEdit = linkEdit.replace("listingId", row.id);

                    var linkDel = "<a href=\"#\" onclick=\"deleteListing(\'id\',\'title\')\">Delete</a>";
                    linkDel = linkDel.replace("id", row.id);
                    linkDel = linkDel.replace("title", row.title);

                    return linkEdit + " | " + linkDel;
                }
            }
        ],
        "columnDefs": [
            {"searchable": false, "targets": [0, 2, 3, 4, 5]}
        ],
        "language": {
            "searchPlaceholder": "by Title"
        },
        "pageLength": 25
    });
}

【问题讨论】:

    标签: jquery ajax datatable


    【解决方案1】:

    这可能适用于您的情况。

    $('#status').change(function(){
        $('#listingTbl').DataTable().ajax.reload();
    });
    

    不要在定义的函数中编写数据表代码。 这是您的代码应如下所示。它应该工作。

    <script type="text/javascript">
        $(function(){
    
            $('#status').change(function(){
                $('#listingTbl').DataTable().ajax.reload();
            });
    
           //var filterStatus = $("#status").val();
    
          $('#listingTbl').DataTable({
             "serverSide": true,
             "processing": true,
             "ordering": false,
             "searchDelay": 1000,
             "ajax": "listing-controller.php?action=filterByState&status="+$("#status").val(),
             "columns": [
                 {"data": "id", "visible": false},
                 {"data": "title"},
                 {"data": "categories"},
                 {"data": "tags"},
                 {"data": "status"},
                 {"data": "ext_ref_id"},
                 {
                    mRender: function (data, type, row) {
                        var linkEdit = '<a href="edit-listing.php?
                               id=listingId">Edit</a>';
                        linkEdit = linkEdit.replace("listingId", row.id);
    
                        var linkDel = "<a href=\"#\" 
                        onclick=\"deleteListing(\'id\',\'title\')\">Delete</a>";
                         linkDel = linkDel.replace("id", row.id);
                        linkDel = linkDel.replace("title", row.title);
    
                           return linkEdit + " | " + linkDel;
                        }
                    }
                ],
                 "columnDefs": [
                 {"searchable": false, "targets": [0, 2, 3, 4, 5]}
                 ],
                 "language": {
                    "searchPlaceholder": "by Title"
                 },
                 "pageLength": 25
             });
         });
    </script>
    

    【讨论】:

    • 没有过滤已经对数据表本身起作用。我希望当用户点击面板上的链接时,数据表被过滤并显示出来。
    • 感谢您的回复。但是我应该在链接中包含什么?如何调用函数从前端过滤数据表?
    • 在每个重新加载事件中var filterStatus 值将是选定的选项。如果var filterStatus 值在每次重新加载时都不会改变,而不是直接在ajax 链接中使用var filterStatus 使用$("#status").val()"ajax": "listing-controller.php?action=filterByState&amp;status="+$("#status").val(),
    猜你喜欢
    • 2019-12-28
    • 1970-01-01
    • 2017-12-04
    • 2013-10-27
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 2018-04-17
    相关资源
    最近更新 更多