2015-04-01 114 views
0

情况:我想创建一个简单的代码,用户必须至少选择一个扩展才能继续。用户应至少选择一个或多个分机,否则将显示一条提示消息。在HTML中至少选择一个选项

问题:问题是,如果只有一个扩展可用于选择,无论选择与否,警告消息将显示不允许注册完成。

//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

看着它,我没有看到问题。您是否在调试器中逐步了解了它在哪些方面出现意想不到的情况? – CindyH 2015-04-01 03:29:43

+0

在变量初始化之后尝试console.log(arrCheckboxes)并检查捕获了哪些元素。 – phobos2077 2015-04-01 03:30:20

+1

http://jsfiddle.net/chriscoyier/BPhZe/76/你可以根据你的警报事件修改​​它(如果我的问题是正确的) – sinanspd 2015-04-01 03:32:00

回答

0

它是从浏览器的最早期的传统,如果有只产品,然后的名字一个表单控件:

document.checkForm.elements["product"]; 

将参考返回到控制,而不是你似乎期望的收藏品。

arrCheckboxes.length 

回报不确定

i < arrCheckboxes.length 

是假的,因此循环从未进入:这些控件默认不那么有长度财产。

为了解决这个问题,使用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; 
+0

非常感谢:DDDD我刚试过,它修复了我的问题!你真棒! – Cloudburst 2015-04-01 04:38:45

相关问题