如何使用外部选择框过滤数据表?

Posted

技术标签:

【中文标题】如何使用外部选择框过滤数据表?【英文标题】:How to use Select box outside to filter dataTables? 【发布时间】:2017-03-08 21:02:53 【问题描述】:

我正在为 jQuery 使用 DataTables Table 插件,但我遇到了问题 获取全局输入搜索框将是一个选择框。

使用sDOM 选项lrtip,过滤输入不显示,但 是否可以显示选择框并根据选择框的变化获取数据表进行过滤?

JS:

$(document).ready(function() 
    var table = $('#table_page').DataTable( 
        paging:   true,
        ordering: false,        
        info:     true,
        searching: true, 
        sDom: "lrtip" // default is lfrtip, where the f is the filter
    );
);

HTML:

<table id="table_page" class="display cell-border" >
    <thead>
        <tr>
            <th>Column 1</th>
            <th>Column 2</th>
        </tr>
    </thead>
</table>

【问题讨论】:

你见过Individual column searching (select inputs) example吗? 是的,但我想要全局搜索而不是单个列搜索。 看起来你的答案在这里:***.com/questions/12199759/… 不,这是一种使用自定义过滤器功能以编程方式过滤数据表的解决方案,而不是使用选择框作为全局搜索。 【参考方案1】:

您可以使用search() API 方法以编程方式执行全局搜索,并使用dom 选项禁用内置搜索控件。

例如:

var table = $('#example').DataTable(
   dom: 'lrtip'
);

$('#table-filter').on('change', function()
   table.search(this.value).draw();   
);

有关代码和演示,请参阅this example。如果要替换默认搜索框,请参阅this example。

【讨论】:

好的,但是您认为是否可以在“显示条目”的同一行中设置选择框(例如带有 sDom 'lfrtip' 选项的输入搜索框) @Gyrocode.com 哇!更新您的答案,以便我接受。谢谢你的帮助,干杯。 @LeMoussel,更新了答案。最后一个示例中还有一个错字已更正,请参阅jsfiddle.net/zmoos6tu/3【参考方案2】:

当我在 DataTable 范围之外创建自定义字段 Month's 并使用下面的代码使其像搜索框一样工作时,有两个可以使用您的自定义字段搜索字符串。

1.第一个解决方案,一旦你点击下拉搜索框将填充你选择的内容并填充结果,但你总是可以看到带有所选值的搜索框。

html

<select name="month-select" id="month-select" class="monthlist" onclick="">
                <option value="">Month's</option>
                <option value="<?php echo date('Y');?>-01">Jan</option>
                <option value="<?php echo date('Y');?>-02">Feb</option>
                <option value="<?php echo date('Y');?>-03">Mar</option>
                <option value="<?php echo date('Y');?>-04">Apr</option>
                <option value="<?php echo date('Y');?>-05">May</option>
                <option value="<?php echo date('Y');?>-06">Jun</option>
                <option value="<?php echo date('Y');?>-07">Jul</option>
                <option value="<?php echo date('Y');?>-08">Aug</option>
                <option value="<?php echo date('Y');?>-09">Sep</option>
                <option value="<?php echo date('Y');?>-10">Oct</option>
                <option value="<?php echo date('Y');?>-11">Nov</option>
                <option value="<?php echo date('Y');?>-12">Dec</option>
                </select>

javascript 代码:

var selectedValue=$("#month-select").val();    
table.search(selectedValue).draw(); 

    我喜欢的第二种解决方案,因为它没有在数据表主搜索字段中显示任何内容,并且结果没有修改搜索字段

    var selectedValue=$("#month-select").val();
     table.columns(6).search( selectedValue ).draw();
    

columns(6)您可以根据您的列顺序修改此数字 6。

【讨论】:

以上是关于如何使用外部选择框过滤数据表?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Ajax 加载过滤后的数据,而无需在 laravel 中重新加载整个页面

如何过滤表单中具有多个组合框的 Access 子表单?

如何从外部列表框中控制 select2 选择框?

如何通过文本框过滤数据表视图中的子表单? #likeoperator #where 子句

如何根据组合框选择过滤datagridview

Access VBA 如何根据多选列表框中的选择过滤记录集?