如何找到或使用javascript检查至少一个复选框

时间:2012-08-24 09:26:32

标签: javascript checkbox

我尝试了很多选项,但没有任何效果。

主要问题是我有很多复选框都是通过php循环生成的,因此它们具有相同的名称和ID。我想在提交该表格时检查是否应该检查至少一个表格。我已经尝试了这么多功能,所以不确定应该粘贴在哪里。所以最好有人建议我一些新的答案。

function Validate_Checkbox()
{
    var chks=document.getElementsByTagName('input');   
    var hasChecked = false;
    for (var i = 0; i < chks.length; i++)
    {
        if (chks[i].checked)
        {
            hasChecked = true;
            break;
        }
    }
    if (hasChecked == false)
    {
        alert("Please select at least one checkbox..!");

        return false;
    }

    return true;
}

在表单标记中称为onsubmit="return Validate_Checkbox()"

基本上我正在寻找一个JavaScript函数。

4 个答案:

答案 0 :(得分:2)

您的代码可以用于您描述的目的。它可能更短,但没有明显的问题。

缩短版

function validate_checkbox() {
    var cbs = document.getElementsByTagName('input');
    for (var i=0, len = cbs.length; i < len; i++)
        if (cbs[i].type.toLowerCase() == 'checkbox' && cbs[i].checked)
            return true;
    alert("Please check at least one checkbox");
    return false;
}

更短的版本(如果你不关心旧的IE)

function validate_checkbox() {
    var checked = document.querySelectorAll('input[type=checkbox]:checked').length;
    if (!checked) alert("Please select at least one checkbox");
    return !!checked;
}

注意:

1)ID必须是唯一的 - 您不能跨多个元素重复ID

2)在JavaScript中,将开放花括号放在同一行而不是下一行

更好(出于超出本文范围的原因)

3)除非你打算实例化它们,否则避免大写函数

答案 1 :(得分:0)

如果您有其他类型的输入,例如textsubmit按钮,则代码将失败。首先,你必须检查是否是复选框。

if (chks[i].type=="checkbox" && chks[i].checked)

如果使用jQuery

,事情会更容易
if ($('input:checked').length < 1){
  //Nothing checked
}

答案 2 :(得分:0)

功能似乎很好。你确定它被调用了吗?尝试使用firefox“Firebug”调试它。 打开firebug-&gt;脚本,然后在此函数上添加断点。

答案 3 :(得分:0)

为什么要在提交时检查?我使用Mootools编写了一个函数,在每个复选框上调用onchange并检查同一div中的每个复选框。如果没有选中其他复选框,则用户无法取消选中上次选中的复选框。

<input type='checkbox' onChange='validateCheckboxes(this)' name='name' value='val' >

 function validateCheckboxes(elem){
                    var checked = elem.checked;
                    elem.getParent().getElements("input[type=checkbox]").each(function(e){checked += e.checked});
                    if(checked == 0){
                        elem.checked = 1;
                    }
                }