当我对“checkAllAud”类的五个“全选”按钮之一进行更改时,我会调用以下Javascript函数。我基本上有5个垂直行,每个行下可能有数百个复选框需要检查/取消选中。
当您要在所有5列上单击全选时,我的当前代码存在问题,只有每隔一列都选中了所有复选框。所以我的问题是如何重写这段代码,以便它可以与我选择所有列和复选框的多个实例一起使用。
var toggle = true;
//on click function here
$(".checkAllAud").change(function() {
var toggled = $(this).val();
//alert('checkallaud function triggered');
toggleBox(toggled);
});
//end on click function
function toggleBox(toggled) {
var objList = document.getElementsByName(toggled)
//alert('toggleBox function triggered');
for(i = 0; i < objList.length; i++)
objList[i].checked = toggle;
toggle = !toggle;
}
这是我的代码目前的工作方式
column1 column 2 column 3 column 4 column 5
(select all) [x] [x] [x] [x] [x]
[x] [ ] [x] [ ] [x]
JSFiddle:http://jsfiddle.net/8KQcp/8/
答案 0 :(得分:0)
您不需要使用全局,只需从您更改的输入中获取已检查状态; - )
$(".checkAllAud").change(function() {
var toggled = $(this).val();
//alert('checkallaud function triggered');
toggleBox(toggled, this.checked);
});
function toggleBox(toggled, checked) {
var objList = document.getElementsByName(toggled)
//alert('toggleBox function triggered');
for(i = 0; i < objList.length; i++)
objList[i].checked = checked;
}
工作jsFiddle :http://jsfiddle.net/8KQcp/9/
改进: http://jsbin.com/cakogulu/1/
$(".checkAllAud").change(function() {
$('input[name^="' + this.value + '"]:checkbox').prop('checked', this.checked);
});
答案 1 :(得分:0)
在分配事件处理程序之前,您可能会考虑进行一些html扩充。
这是这个例子的小提琴:
你需要你的javascript迭代一个可重复的html结构。所以,假设你有一个像这样的html结构:(见小提琴)
<table class="jsSelectAll">
<tbody>
<tr class="select-all">
<td>Select All</td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
</tr>
<tr>
<td>Row Label</td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
</tr>
<tr>
<td>Row Label</td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
</tr>
</tbody>
<tbody>
<tr class="select-all">
<td>Select All</td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
</tr>
<tr>
<td>Row Label</td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
</tr>
</tbody>
</table>
然后,我会考虑根据需要在表中分解每个表和tbody,并在复选框中添加行(如果需要)和列指针。另外,我会使用闭包使事件接线更容易,如下所示:
jQuery(function ($) {
// closures
var $tables = $('table.jsSelectAll');
$tables.each(function () {
// closures
var $table = $(this);
var $tbodies = $table.find('tbody');
$tbodies.each(function () {
// closures
var $tbody = $(this);
var $rows = $tbody.find('tr');
var $selectAllCheckboxes = $tbody.find('.select-all input[type="checkbox"]');
var $allCheckboxes = $tbody.find('tr td input[type="checkbox"]')
// label data cells with rows(if desired) and collumns
$rows.each(function (rowIndex) {
// closures
var $row = $(this);
var $inputs = $row.find('input[type="checkbox"]');
$row.attr('data-row', rowIndex);
$inputs.each(function (colIndex) {
// closures
$cbx = $(this);
$cbx.attr('data-col', colIndex);
});
});
// wire select all for each select-all row checkbox
$selectAllCheckboxes.each(function () {
// closures
var $cbx = $(this)
var fClick = function () {
var iCol = $cbx.attr('data-col');
$allCheckboxes
.filter('[data-col="' + iCol + '"]')
.each(function () {
$(this).prop('checked', true);
});
};
$cbx.click(fClick);
});
});
});
});