我有一个显示数据的搜索屏幕。如果我得到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;
}
}
答案 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');
});