情况:我想创建一个简单的代码,用户必须至少选择一个扩展才能继续。用户应选择至少一个或多个扩展名,否则将显示警告消息。
问题:问题是,如果只有一个可用的扩展名可供选择,无论是否被选中,都会出现警告消息,不允许注册完成。
//Select atleast one extension
var arrCheckboxes = document.checkForm.elements["product"];
var checkCount = 0;
for (var i = 0; i < arrCheckboxes.length; i++) {
checkCount += (arrCheckboxes[i].checked) ? 1 : 0;
}
if (checkCount > 0){
return true;
} else {
alert("Select at least one Extension.");
return false;
}
答案 0 :(得分:0)
从浏览器的早期阶段开始,如果只有一个表单控件的名称为 product ,那么这是遗产:
document.checkForm.elements["product"];
将返回对该控件的引用,而不是您期望的集合。默认情况下,此类控件没有 length 属性:
arrCheckboxes.length
返回 undefined 和
i < arrCheckboxes.length
为false,因此永远不会输入循环。
要解决此问题,请使用 querySelectorAll ,它始终返回一个集合:
var arrCheckboxes = document.checkForm.querySelectorAll('[name=product]');
在IE 8+和其他任何地方都受支持。一个更简单的代码版本(假设它在函数体中):
var arrCheckboxes = document.checkForm.querySelectorAll('[name=product]');
for (var i = 0; i < arrCheckboxes.length; i++) {
if (arrCheckboxes[i].checked) return true;
}
alert("Select at least one Extension.");
return false;