JavaScript-选择所有复选框JS切换问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JavaScript-选择所有复选框JS切换问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4486字,纯文字阅读大概需要7分钟。
内容图文
![JavaScript-选择所有复选框JS切换问题](/upload/InfoBanner/zyjiaocheng/653/0e8c5c1b05fd4b1682596ba64337f446.jpg)
希望有人可以帮助我克服对Javascript的无知.
我有一个包含复选框的表单,并且有一块JS可以切换选择/取消选择所有复选框.到目前为止,一切都按预期进行.
工作中的问题在于,我在此表单中有多组复选框,我想按组选择/取消选择,而不是表单中的所有复选框.这是php和html的示例.如您所见,表单在表格中,并且标题行中有一个复选框可以执行该操作. ‘resources_req’是表单中复选框元素的名称
<form method="post" name="add_reservation">
<?php for($x=0; $x<count($groups); $x++) : // make seperate display for each group ?>
<div class="group_<?php echo $group_label; ?>">
<table class="res">
<tr>
<!-- form: checkbox all -->
<?php if($make_res == 'enter') : // adds checkbox to check all ?>
<th><input type="checkbox" onClick="toggle(this, 'resources_req[]')" /></th>
<?php endif; ?>
<!-- end form: checkbox all -->
</tr>
...
foreach($resources as $resource) { // for each resource/laptop
$form_start = '<td>';
$form_start .= '<input type="checkbox" name="resources_req[]" value="'.$resource['id'].'"';
$form_start .= ' />';
$form_start .= '</td>';
}
...
</table>
</div>
<?php endfor; // loop for each group ?>
<input type="submit" name="add_reservation" value="Make this reservation" />
</form>
这是被称为JS:
function toggle(source, element) {
checkboxes = document.getElementsByName(element);
for(var i in checkboxes)
checkboxes[i].checked = source.checked;
}
尽我所能,脚本调用中的“ this”是指表单.我想,也许如果我将这些小组中的每一个都放入他们自己的div类中,那么我可以以某种方式引用它,但是现在我迷路了.任何帮助或建议表示赞赏!
编辑:我问的建议,有人建议我只张贴html:
<form method="post" name="add_reservation">
<div class="group_A">
<table>
<tr>
<th><input type="checkbox" onClick="toggle(this, 'resources_req[]')" /></th>
<th>Name</th>
</tr>
<tr>
<td><input type="checkbox" name="resources_req[]" value="1" /></td>
<td>John</td>
</tr>
<tr>
<td><input type="checkbox" name="resources_req[]" value="2" /></td>
<td>Bill</td>
</tr>
<tr>
<td><input type="checkbox" name="resources_req[]" value="3" /></td>
<td>Fred</td>
</tr>
</table>
</div>
<div class="group_b">
<table>
<tr>
<th><input type="checkbox" onClick="toggle(this, 'resources_req[]')" /></th>
<th>Name</th>
</tr>
<tr>
<td><input type="checkbox" name="resources_req[]" value="4" /></td>
<td>George</td>
</tr>
<tr>
<td><input type="checkbox" name="resources_req[]" value="5" /></td>
<td>Tom</td>
</tr>
<tr>
<td><input type="checkbox" name="resources_req[]" value="6" /></td>
<td>Raymons</td>
</tr>
</table>
</div>
<input type="submit" name="add_reservation" value="Make this reservation" />
</form>
解决方法:
我改变了几件事:
首先,我没有传递name的值,而是传递了’input’的tagName.
<input type="checkbox" onClick="toggle(this, 'input')" />
然后,在toggle()函数中,选择源元素的parentNode,然后执行getElementsByTagName(),以便仅在本地div中获得输入元素.
另外,我将for-in循环更改为标准的for循环,这是迭代索引元素的正确循环类型. for-in实际上可能会带来一些问题.
function toggle(source, element) {
var checkboxes = source.parentNode.getElementsByTagName(element);
for (var i = 0; i < checkboxes.length; i++) {
checkboxes[i].checked = source.checked;
}
}
实时示例:http://jsfiddle.net/37mT2/
备择方案:
代替父节点,选择祖先< div>.元素,方法是为其分配一个ID,然后将其传递给toggle()函数.
<input type="checkbox" onClick="toggle(this, 'input', 'someUniqueId_1')" />
<input type="checkbox" onClick="toggle(this, 'input', 'someUniqueId_2')" />
function toggle(source, element, id) {
var checkboxes = document.getElementById( id ).getElementsByTagName('input');
for (var i = 0; i < checkboxes.length; i++) {
checkboxes[i].checked = source.checked;
}
}
或者,您可以遍历父节点,直到到达第一个< div>元件:
<input type="checkbox" onClick="toggle(this, 'input')" />
function toggle(source, element) {
while( source && source = source.parentNode && source.nodeName.toLowerCase() === 'div' ) {
; // do nothing because the logic is all in the expression above
}
var checkboxes = source.getElementsByTagName('input');
for (var i = 0; i < checkboxes.length; i++) {
checkboxes[i].checked = source.checked;
}
}
或者,您可以给< div>该级别上的元素具有通用的类名称,并遍历父节点,直到到达该类.在下面的代码中,您的< div>元素类为“ someClassName”:
<input type="checkbox" onClick="toggle(this, 'input')" />
function toggle(source, element) {
while( source && source = source.parentNode && source.className === 'someClassName' ) {
; // do nothing because the logic is all in the expression above
}
var checkboxes = source.getElementsByTagName('input');
for (var i = 0; i < checkboxes.length; i++) {
checkboxes[i].checked = source.checked;
}
}
编辑:修正了一个错字.我有getElementsById而不是getElementById.
内容总结
以上是互联网集市为您收集整理的JavaScript-选择所有复选框JS切换问题全部内容,希望文章能够帮你解决JavaScript-选择所有复选框JS切换问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。