我有一段JavaScript应该检查或联合检查我的所有复选框(命名相同)..当有多个复选框时,工作正常...没有'如果只有一个复选框,则工作。 (我意识到在单一选项屏幕上点击“全部检查”之间的实际区别是相同的,并且有人可能认为“检查全部”甚至不应出现在只有一个选项的屏幕 - 但是客户端坚持在一致的屏幕上......所以请不要把我带到我已经讨论过的路线上
脚本:
// check uncheck all check boxes
var checkAll = function( checkname, exby ) {
alert( checkname.length ); // undefined when there is only one check box
for ( i = 0; i < checkname.length; i++ ) {
checkname[i].checked = exby.checked ? true : false;
}
}
注意 - 我添加了一个警告来检查长度,当只有一个复选框时它是未定义的,但在任何其他时间都是准确的????
DOESN的工作......
<form method="post" name="createInvoice" >
Check/Uncheck All <input name="chkAll" onclick="checkAll( document.createInvoice.PO, this );" type="checkbox" >
<input name="PO" value="7835" class="chkbox" type="checkbox" >
</form>
要做的HTML ......
<form method="post" name="createInvoice" >
Check/Uncheck All <input name="chkAll" onclick="checkAll( document.createInvoice.PO, this );" type="checkbox" >
<input name="PO" value="13506" class="chkbox" type="checkbox" >
<input name="PO" value="14046" class="chkbox" type="checkbox" >
</form>
答案 0 :(得分:3)
如果只有1那么它就是元素,而不是数组。
if (!!checkname.length) {
for ( i = 0; i < checkname.length; i++ ) {
checkname[i].checked = exby.checked ? true : false;
}
} else {
checkname.checked = exby.checked ? true : false;
}
答案 1 :(得分:2)
这是因为它是如何实现的。
名称可以在document.getElementsByName()方法中使用,表单和表单元素集合。与表单或元素集合一起使用时,它可能返回单个元素或集合。
var checkAll = function( checkname, exby ) {
if(!checkname.length)
{
checkname.checked = exby.checked ? true : false;
return;
}
alert( checkname.length ); // undefined when there is only one check box
for ( i = 0; i < checkname.length; i++ ) {
checkname[i].checked = exby.checked ? true : false;
}
}
答案 2 :(得分:2)
我相信当你有一个名为“PO”的复选框时,document.createInvoice.PO
将评估具有该名称的单个DOM元素。如果有多个,显然它会给你一个DOM元素列表,它具有length
属性。
所以当只有一个时,你没有得到一个长度。
您可以添加逻辑来处理这两种情况:
var checkAll = function( checkbox, exby ) {
var checkboxes = checkbox.length ? checkbox : [checkbox];
for ( i = 0; i < checkboxes.length; i++ ) {
checkboxes[i].checked = exby.checked;
}
};