繁体   English   中英

如何检查是否在javascript中选中了复选框?

[英]How to check if a checkbox is checked in javascript?

我有多个复选框,我想知道是否选中其中一个。 我的代码没有给我任何错误,但是我没有得到预期的结果。 当我运行代码时,始终会获得第一个警报,该警报位于for循环内。 以下是我的代码:

function validate(){


    if(document.getElementById('postTW').checked || document.getElementById('postFB') ){

        var checker = document.getElementsByName('twitter[]');
        for (var i = 0; i < checker.length; i++) {
            if(checker[i].checked){
                return true;
            }

            else{

                alert("Not enough arguments ");

                return false;
            }
        };

    }


    else{
        alert("Not enough arguments to submit the form");

        return false;
    }

}

我的表格是method = post,如下所示

<input class="twGroup" type="checkbox" name="twitter[]" value="x"/> 
<input class="twGroup" type="checkbox" name="twitter[]" value="y"/>
<input class="twGroup" type="checkbox" name="twitter[]" value="z"/>

由于返回,此代码仅检查第一个复选框:

for (var i = 0; i < checker.length; i++) {
    if(checker[i].checked) {
        return true;
    } 
    else {
        alert("Not enough arguments ");
        return false;
    }
};

尝试这个:

var checked_flag = false;
for (var i = 0; i < checker.length; i++) {
    if(checker[i].checked) {
        checked_flag = true;
    }         
};
return checked_flag;

以下代码中是否存在逻辑错误?

for (var i = 0; i < checker.length; i++) {
        if(checker[i].checked){
            return true;
        }

        else{

            alert("Not enough arguments ");

            return false;
        }
    };

我假设您想要这样的东西:

var flag=false;
for (var i = 0; i < checker.length; i++) {
            if(checker[i].checked){
                flag=true;
            }
        };
if (!flag){
        alert("Not enough arguments ");
}

如果未选中任何名为twitter[]复选框,则使用将返回false的标志

function validate(){
 if(document.getElementById('postTW').checked || document.getElementById('postFB').checked ){
   var result = true;
    var checker = document.getElementsByName('twitter[]');
    for (var i = 0; i < checker.length; i++) {
        if(!checker[i].checked){
            alert("Not enough arguments ");
            result = false;
            return;
        }
    };
}
else{
    alert("Not enough arguments to submit the form");
    result = false;
}
return result

}

看起来您的代码中存在逻辑错误。 按照书面说明,如果选中第一个复选框,那么您将进入else语句并显示警报。 您应该简单地删除第一个else语句,然后将第一个警报移出for循环:

function validate() {
    if(document.getElementById('postTW').checked || document.getElementById('postFB') ) {
        var checker = document.getElementsByName('twitter[]');
        for (var i = 0; i < checker.length; i++) {
            if(checker[i].checked){
                return true;
            }
        };

        // else fall through
        alert("Not enough arguments ");
        return false;
    }
    else {
        alert("Not enough arguments to submit the form");
        return false;
    }
}

将您的复选框包裹在<form>元素周围。 显示的示例:

<form name="myform">
    <input type="checkbox" name="twitter[]" />
    <input type="checkbox" name="twitter[]" checked="checked" />
    <input type="checkbox" name="twitter[]" />
    <input type="checkbox" name="twitter[]" checked="checked" />
    <input type="checkbox" name="twitter[]" />
</form>

如图所示应用Javascript。

    if (document.getElementById('postTW').checked || document.getElementById('postFB')) {
        var myform = document.forms.myform;
        var elems = myform.elements['twitter[]'];
        for (var i = 0; i < elems.length; i++) {
            if (elems[i].checked) {
                return true;
            }
        }
        alert("Not enough arguments to submit the form");
        return false;

    } else {
        alert("Not enough arguments to submit the form");
        return false;
    }

你不认为你应该写:

if(document.getElementById('postTW').checked || document.getElementById('postFB').checked ){

代替:

if(document.getElementById('postTW').checked || document.getElementById('postFB') ){

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM