我有一个表单和一组复选框。 (这些复选框是动态创建的,但我认为这对于这个问题并不重要)。生成它们的代码看起来像这样(表单的一部分):
<div id="ScrollCB">
<input type="checkbox" name="ALL" value="checked" checked="checked">
All (if nothing selected, this is default) <br>
<c:forEach items="${serviceList}" var="service">
<input type="checkbox" name="${service}" value="checked"> ${service} <br>
</c:forEach>
</div>
我想要做的是控制,是否选中标记为“ALL”的复选框,如果是,则选中所有其他复选框(如果未选中,则取消选中所有复选框)。
我尝试用这样的javascript做这个(找到一些教程),但它不起作用(我在javascript中真正的新手,难怪):
<script type="text/javascript">
$ui.find('#ScrollCB').find('label[for="ALL"]').prev().bind('click',function(){
$(this).parent().siblings().find(':checkbox').attr('checked',this.checked).attr('disabled',this.checked);
}); });
</script>
你能告诉我一些简单的方法如何让它发挥作用?非常感谢!
答案 0 :(得分:8)
<强> HTML:强>
<label><input type="checkbox" name="sample" class="selectall"/> Select all</label>
<div id="checkboxlist">
<label><input type="checkbox" name="sample[]"/>checkbox1</label><br />
<label><input type="checkbox" name="sample[]"/>checkbox2</label><br />
<label><input type="checkbox" name="sample[]"/>checkbox3</label><br />
<label><input type="checkbox" name="sample[]"/>checkbox4</label><br />
</div>
<强> JS:强>
$('.selectall').click(function() {
if ($(this).is(':checked')) {
$('div input').attr('checked', true);
} else {
$('div input').attr('checked', false);
}
});
答案 1 :(得分:4)
<强> HTML:强>
<form>
<label>
<input type="checkbox" id="selectall"/> Select all
</label>
<div id="checkboxlist">
<label><input type="checkbox" name="sample[]"/>checkbox1</label><br />
<label><input type="checkbox" name="sample[]"/>checkbox2</label><br />
<label><input type="checkbox" name="sample[]"/>checkbox3</label><br />
<label><input type="checkbox" name="sample[]"/>checkbox4</label><br />
</div>
</form>
<强> JS:强>
$('#selectall').click(function() {
$(this.form.elements).filter(':checkbox').prop('checked', this.checked);
});
答案 2 :(得分:2)
感谢@Ashish,如果您手动勾选所有子复选框,我已稍微扩展它以允许“主”复选框自动选中或取消选中。
<强> HTML 强>
<label><input type="checkbox" name="sample" class="selectall"/>Select all</label>
<div id="checkboxlist">
<label><input type="checkbox" class="justone" name="sample[]"/>checkbox1</label><br/>
<label><input type="checkbox" class="justone" name="sample[]"/>checkbox2</label><br />
<label><input type="checkbox" class="justone" name="sample[]"/>checkbox3</label><br />
<label><input type="checkbox" class="justone" name="sample[]"/>checkbox4</label><br />
</div>
<强> SCRIPT 强>
$('.selectall').click(function() {
if ($(this).is(':checked')) {
$('input:checkbox').prop('checked', true);
} else {
$('input:checkbox').prop('checked', false);
}
});
现在添加此项以管理主复选框......
$("input[type='checkbox'].justone").change(function(){
var a = $("input[type='checkbox'].justone");
if(a.length == a.filter(":checked").length){
$('.selectall').prop('checked', true);
}
else {
$('.selectall').prop('checked', false);
}
});
答案 3 :(得分:1)
使用这个我希望能帮助你,我知道这是一个迟到的答案,但如果有人再次来到这里
$("#all").change(function () {
$("input:checkbox").prop('checked', $(this).prop("checked"));
});
答案 4 :(得分:0)
您可以像这样使用jQuery:
的jQuery
$('[name="ALL"]:checkbox').change(function () {
if($(this).attr("checked")) $('input:checkbox').attr('checked','checked');
else $('input:checkbox').removeAttr('checked');
});
A fiddle。
答案 5 :(得分:0)
我不知道为什么在复选框上有名字时会使用标签。使用它作为选择器。此外,您的代码在HTML标记中没有标签,因此它不会找到任何内容。
这是基本的想法
$(document).on("click",'[name="ALL"]',function() {
$(this).siblings().prop("checked",this.checked);
});
如果有其他元素是兄弟姐妹,那么你将过滤兄弟姐妹
$(document).on("click",'[name="ALL"]',function() {
$(this).siblings(":checkbox").prop("checked",this.checked);
});
答案 6 :(得分:0)
var selectedIds = [];
function toggle(source) {
checkboxes = document.getElementsByName('ALL');
for ( var i in checkboxes)
checkboxes[i].checked = source.checked;
}
function addSelects() {
var ids = document.getElementsByName('ALL');
for ( var i = 0; i < ids.length; i++) {
if (ids[i].checked == true) {
selectedIds.push(ids[i].value);
}
}
}
在HTML中:
主复选框<input type="checkbox" onClick="toggle(this);">
其他复选框<input type="checkbox" name="ALL">
答案 7 :(得分:0)
您可以使用:first选择器查找第一个输入并将change事件绑定到它。在下面的例子中,我使用:第一个输入的:checked状态来定义它的兄弟姐妹的状态。我还建议将代码放在JQuery ready事件中。
$('document').ready(function(){
$('#ScrollCB input:first').bind('change', function() {
var first = $(this);
first.siblings().attr('checked', first.is(':checked'));
});
});
答案 8 :(得分:0)
根据您的复选框组添加额外脚本:
<script language="JavaScript">
function selectAll(source) {
checkboxes = document.getElementsByName('colors[]');
for(var i in checkboxes)
checkboxes[i].checked = source.checked;
}
</script>
HTML代码:
<input type="checkbox" id="selectall" onClick="selectAll(this,'color')" />Select All
<ul>
<li><input type="checkbox" name="colors[]" value="red" />Red</li>
<li><input type="checkbox" name="colors[]" value="blue" />Blue</li>
<li><input type="checkbox" name="colors[]" value="green" />Green</li>
<li><input type="checkbox" name="colors[]" value="black" />Black</li>
</ul>
答案 9 :(得分:0)
仅在具有自动检查/取消检查功能的JavaScript中,当选中/取消选中任何子项时。
function FnCheckAll()
{
var ChildChkBoxes = document.getElementsByName("ChildCheckBox");
for (i = 0; i < ChildChkBoxes.length; i++)
{
ChildChkBoxes[i].checked = document.forms[0].CheckAll.checked;
}
}
function FnCheckChild()
{
if (document.forms[0].ChildCheckBox.length > document.querySelectorAll('input[name="ChildCheckBox"]:checked').length)
document.forms[0].CheckAll.checked = false;
else
document.forms[0].CheckAll.checked = true;
}
主复选框:
<input type="checkbox" name="CheckAll" id="CheckAll" onchange="FnCheckAll()" />
子复选框:
<input type="checkbox" name="ChildCheckBox" id="ChildCheckBox" onchange="FnCheckChild()" value="@employee.Id" />```