"全选"使用tablesorter时出现问题

时间:2015-10-19 15:08:56

标签: jquery tablesorter selectall

我有一个显示数据的搜索屏幕。如果我得到200行。 selectAll选择所有行的所有复选框。

我的问题是,当用户通过选择过滤器选项来过滤行时,基于此时的过滤器,行将减少到70左右,而我的selectAll仍会选择所有200行。我想只选择过滤的行。 我们使用jQuery来过滤代码,如下所示。 如果可能的话,纯JavaScript解决方案将是最好的(因为我不太了解jQuery)。 jQuery是最后的首选,但还可以。我很乐意让页面正常运行。

这是我的代码:

<script src="js/jquery-1.4.4.min.js" type="text/javascript" />
<script src="js/jquery.tablesorter.js"></script>
<script src="js/jquery.tablesorter.widgets.js"></script>
<script type="text/javascript" src="js/jquery.tablesorter.pager.js"></script>


<h:commandButton  type="button" id="selectAll" value="Select All"   onclick="selectAllCheckboxes()">

selectAllCheckboxes() 

以下代码:

var checkboxes = table.getElementsByTagName('INPUT');
for (var i = 0; i < checkboxes.length; i++) {
                     if (checkboxes[i].type == 'checkbox' && checkboxes[i].disabled ==false) {
             checkboxes[i].checked = true;
         }
    }

2 个答案:

答案 0 :(得分:1)

假设您的复选框是已过滤的tr的子项,您可以执行此操作(未经测试但应该可以使用):

selectAllCheckboxes(){
    $('tr:not(.filtered) input[type=checkbox]').attr('checked', 'checked');
}

如果您打算使用jQuery,您可以将其用于所有内容。当$('#id')做同样的事情时,让我疯狂地看到人们使用jQuery并且仍然输入“document.getElementById('id')”。还使用jQuery选择元素数组,您可以在数组中的所有元素上设置属性,而无需执行for循环。

答案 1 :(得分:0)

可选解决方案: 过滤行时,添加到每个行属性filtered=true, 然后在selectAll上只选择具有此属性的行,例如

    var filteredRows=$('rows[filtered]');
    var notFilteredRows=$('rows:not([filtered])');

您没有发布HTML,因为我看到了完整的解决方案:

$('rows[filtered]').each(function(){
   $(this).closest('input[type=checkbox]').attr('checked','checked');
});