多个复选框验证javascript

时间:2013-10-21 00:39:14

标签: javascript

我知道网上有很多线程,我已经尝试了所有线程,但它仍然无效,请帮忙。 我想确保至少选择了一个程序。我检查了控制台,但没有错误,也说调试器未激活。

JavaScript:

function validateForm() {
        if (document.getElementById('cfname').value === '') {
        document.getElementById('errcfname').innerHTML = "Please enter firstname";
        return false;
        }

        if (document.enrollment.clname.value == "") {
        document.getElementById('errclname').innerHTML = "Please enter lastname";
        clname.focus();
        return false;
        }

        if(validateRadio (document.getElementsByName('gender'))) {
            return true;
        } else {
            document.getElementById('errgender').innerHTML = "Please specify gender";
            return false;
        }

        var chk = document.getElementsByName('program[]');
        var len = chk.length;
            var checked = false;
        for(i=0;i<len;i++) {
             if(chk[i].checked) {
                checked=true;
                            break;
                      }
            }
        if (!checked) {
                document.getElementById('errpgm').innerHTML = "Please specify program"; 
                return false;
              } 
        }
        return true;
    }
    function validateRadio(radios) {
        for (i = 0; i < radios.length; ++ i) {
            if (radios[i].checked) 
                return true;
        }
        return false;
    }
    function validate(id,error) {
        var value = document.getElementById(id).value;
        var err = document.getElementById(error);
        if(!value) {
            err.innerHTML = "*required";
        } else {
            err.innerHTML = "*";
        }
    }

3 个答案:

答案 0 :(得分:0)

这里有一个问题:

> var chk = document.getElementsByName('program[]');
> var len = chk.length;
> 
> for (i=0; i<len; i++) {
>
>   if (chk[i].checked) {
>     return true;
>  
>   } else {
>     document.getElementById('errpgm').innerHTML = "Please specify gender";  
>     return false;
>   }
> }

在上面,只会测试第一个复选框,然后该函数将根据是否被选中返回true或false。如果您希望用户只选择一个复选框,请使用单选按钮,默认选中一个。否则,请使用以下内容:

var oneChecked = false;
while (i-- && !oneChecked) {
  oneChecked = chk[i].checked;
}

if (!oneChecked) {
  document.getElementById('errpgm').innerHTML = "Please specify gender";  
  return false;
}

此外,错误消息似乎不适用于复选框值,因为它们似乎与性别无关。

答案 1 :(得分:0)

试试这个:

    var chk = document.getElementsByName('program[]');
    var len = chk.length;
    var has_program = false;
    for(i=0;i<len;i++) {
         if(chk[i].checked) {
            has_program = true;
            break;    
          } 
    }
    if( !has_program )
    {
         document.getElementById('errpgm').innerHTML = "Please specify gender";
         return false;
    }

    return true;

答案 2 :(得分:0)

基本上你的事情过于复杂。

对于初学者,您应该使用像jQuery这样的客户端框架。我已经提供了一个JSFiddle,它可以在这里为您工作,http://jsfiddle.net/nickyt/g2Ab3

如果您是在纯JavaScript中执行此操作,则可以使用以下内容:

document.forms[0]["program[]"]

获取复选框组中的所有复选框。从那里你将循环这个集合,如果没有任何表单元素具有.checked属性,你将失败验证,但正如我所提到的,jQuery为你处理了很多这个基本的JavaScript。我认为阅读jQuery选择器也会让你受益,http://api.jquery.com/category/selectors