Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何添加到我的表过滤器以允许多个复选框选择,以及从下拉列表中进行过滤?_Javascript_Jquery_Forms_Filter_Html Table - Fatal编程技术网

Javascript 如何添加到我的表过滤器以允许多个复选框选择,以及从下拉列表中进行过滤?

Javascript 如何添加到我的表过滤器以允许多个复选框选择,以及从下拉列表中进行过滤?,javascript,jquery,forms,filter,html-table,Javascript,Jquery,Forms,Filter,Html Table,我有一个表,可以通过多个复选框以及“选择”下拉列表进行过滤。本质上,我希望能够做的是单击多个复选框,以便找到包含该类的每一行,即类1和3,或示例,然后按位置对其进行过滤 这一点我已经非常接近了,我可以从复选框中选择位置(也是一个类,两个字母代表州缩写)和一个类,但我希望人们能够从复选框中比较多个类 我理解这个问题,但似乎不知道如何解决。代码将每个类添加到“tr”的末尾。这意味着,如果从复选框中应用2个过滤器,它将什么也找不到,而不是从每个过滤器中查找所有内容。虽然此行为对于1复选框和下拉列表非常

我有一个表,可以通过多个复选框以及“选择”下拉列表进行过滤。本质上,我希望能够做的是单击多个复选框,以便找到包含该类的每一行,即类1和3,或示例,然后按位置对其进行过滤

这一点我已经非常接近了,我可以从复选框中选择位置(也是一个类,两个字母代表州缩写)和一个类,但我希望人们能够从复选框中比较多个类

我理解这个问题,但似乎不知道如何解决。代码将每个类添加到“tr”的末尾。这意味着,如果从复选框中应用2个过滤器,它将什么也找不到,而不是从每个过滤器中查找所有内容。虽然此行为对于1复选框和下拉列表非常有效,这意味着它只会给我来自田纳西州的Filter 1值,但如果我选择的话,我希望它能够同时给我Filter 2、Filter 3和Filter 4

有没有关于如何更改此选项以允许多个复选框选择的想法

顺便说一句,我对可以使用的JavaScript/jQuery插件非常有限,这就是为什么我要在这个解决方案中努力使用tableSorter

我的HTML:

 <form name="FilterForm" id="FilterForm" action="" method="">
    <input type="checkbox" name="filterStatus" value="1" /><label for="filter_1">Filter 1</label>
    <input type="checkbox" name="filterStatus" value="2" /><label for="filter_2">Filter 2</label>
    <input type="checkbox" name="filterStatus" value="3" /><label for="filter_3">Filter 3</label>
    <input type="checkbox" name="filterStatus" value="4" /><label for="filter_4">Filter 4</label>
    <select type="dropdown" name="filterStatus" id="chooseState" class="filter">
      <option value="ZZ">--Choose State--</option>
      <option value="TN">Tennessee</option>
      <option value="MO">Missouri</option>
      <option value="NV">Nevada</option>
      <option value="IA">Iowa</option>
    </select><label>State</label>
       </form>

<table id="StatusTable">
     <tbody>                        
       <tr class="1 TN">
       <td class="Name"></td>
       <td class="ID"></td>
       <td class="Type"></td>
       <td class="Location">City, Tennessee</td>
       <td class="Class"></td>
       <td class="Received"></td>
       <td class="Action"></td>
       <td class="Status">Active</td>
     </tr>
</tbody>
</table>

既然你知道这个问题,我就跳过解释,跳到解决方案上来

.filter()
方法与数组混合使用

将类名推入数组,而不是扩展字符串:

var classes = [];

$("input[name='filterStatus']").each(function() {
    if ($(this).is(":checked")) {
        classes.push('.'+$(this).val());
    }
});
然后在选择行时,使用
.filter()
如下所示:

rows = $("#StatusTable tr" + stateClass).filter(classes.length ? classes.join(',') : '*')
那么一切都很好


您说问题出在复选框上,但我看不出您在代码中的何处使用了复选框,您能用小提琴重现它吗?在我最后一次尝试编辑时,我设法打破了它。我对我的问题进行了编辑,以重新包含它。让我看看能不能用小提琴演奏。谢谢我现在正在复习。谢谢你的建议,我会告诉你的!它活着!非常感谢你抽出时间,因为这使我不再头撞墙了。享受你余下的一天,享受你的“答案”状态。我无意中发现了一个关于答案的问题。如果只选择一个状态,它将不提供任何信息。你有没有想过如何避开这个问题?我也在为此而努力。
rows = $("#StatusTable tr" + stateClass).filter(classes.length ? classes.join(',') : '*')