【问题标题】:Javascript count checked checkboxJavascript 计数复选框
【发布时间】:2023-04-10 04:12:01
【问题描述】:

我知道@stackoverflow 可能有一些类似的问题,但我还没有找到任何解决我的问题的方法:s

<?php
while($rowVideo = mysql_fetch_array($ResultQueryVideo))
{
?>
<input type="checkbox" name = "checkbox-1[]" class="checkbox" value ="<?php echo $rowVideo['idVideo'] ?>" /> <?php....some code...

这会产生几个复选框,与 idVideo 相同的数字..这就是重点。

现在,在提交之前,我需要确保至少选中一个复选框。但我没有成功:x

function isCountCheck (helperMsg) {
    var chkCnt = 0;
    var Frm = document.forms[0];
    var dLen = Frm.length - 1;
    for (i=0;i<=dLen;i++) {
        if(document.form1.["checkbox-1[]"].checked) chkCnt++;
    }

    if (chkCnt>0) {
        return true;
    } else {
        alert(helperMsg);
        return false;
    }
}

额外细节: 表单名称 = "form1"

你能指导我一下吗? 谢谢

编辑:

function isCountCheck(){
    if($("input[type=checkbox]:checked").length > 0)
    {
    return true;
    }
    else
    {
    alert('Invalid');
    return false;
    }
}

但仍然无法正常工作..即使显示警报..

【问题讨论】:

  • 什么是document.addemisao
  • 您更新的代码使用了 jQuery - 您是否在页面中包含了 jquery.js 库?

标签: javascript checkbox checked


【解决方案1】:

最简单的解决方案:

var form = document.forms[0]; // your form element (whatever)
var checkedElms = form.querySelectorAll(':checked').length;

不需要 jQuery。支持到 IE8。如果您愿意,可以为旧版浏览器使用 polyfill。

【讨论】:

    【解决方案2】:

    主要问题是您没有在循环中使用i 索引来引用各个复选框,并且在[ 之前有一个.,这是一个语法错误。所以改变:

    if(document.form1.["checkbox-1[]"].checked) chkCnt++;
    

    收件人:

    if(document.form1["checkbox-1[]"][i].checked) chkCnt++;
    

    但您可以按如下方式整理函数:

    function isCountCheck(helperMsg) {
        var i, dLen = document.form1["checkbox-1[]"].length;
        // if the length property is undefined there is only one checkbox
        if (typeof dLen === "undefined") {
            if (document.form1["checkbox-1[]"].checked) return true;
        }
        else {
            for (i = 0; i < dLen; i++) {
                if (document.form1["checkbox-1[]"][i].checked) return true;
            }
        }
        alert(helperMsg);
        return false;
    }
    

    演示:http://jsfiddle.net/nnnnnn/ZjK3w/1/

    或者只是遍历表单中的所有输入,检查每个输入的类型(和/或名称):

    function isCountCheck(helperMsg) {
        var i, len, inputs = document.form1.getElementsByTagName("input");
        for (i = 0, len = inputs.length; i < len; i++) {
            if (inputs[i].type === "checkbox"
                && inputs[i].checked)
                return true;
        }
        alert(helperMsg);
        return false;
    }
    

    演示:http://jsfiddle.net/nnnnnn/ZjK3w/2/

    【讨论】:

    • 问题是,我只有一个 &lt;input type="checkbox"&gt; 并且因为 while,它可能会出现 3 或 5 个我们的复选框,这取决于我得到的 idVideo 行数。
    • 像这样:如果我有 3 个视频 - 出现 3 个复选框。如果我有 1 个视频 - 仅显示 1 个 checkbx。这工作正常。所以我不能按照你建议的方式解决我的问题。还是谢谢
    • 嗨,我认为它可能有效 :) 谢谢。感谢stackoverflow!
    • 来自一个老旧但长期退休的程序员,我也在尝试计算支票,所以我希望这个问题不要太愚蠢。函数实际上在哪里被调用?形式上?在每个复选框中?
    • @DonP - OP 没有准确说明 他们 从哪里调用该函数,但我假设可能来自提交处理程序,因为他们想在提交之前进行验证。在我的小 jsfiddle 演示中,我从按钮上的单击处理程序中调用它。
    【解决方案3】:

    使用 Jquery:

    function isCountCheck(helperMsg){
        if($("input[type=checkbox]:checked").length > 0)
            return true;
        alert(helperMsg);
        return false;
    }
    

    【讨论】:

    • 它工作不用担心 =)。您一定忘记在演示中包含 JQuery 库。我将上面的函数添加到您的 JSFiddlle:jsfiddle.net/cHxFJ/1
    猜你喜欢
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    • 2021-10-07
    • 2020-01-03
    • 2018-03-27
    • 2012-11-01
    相关资源
    最近更新 更多