批量检查单选和多选按钮是否选中

在项目开发中,遇到这样一个问题,网页中有多组单选问题和复选项,甚至还有下拉列表或文本输入框……除了text文本输入框能够给它添加required属性外以外,其余都不能用html自带的属性来实现必选的功能。因而从网上搜索了相关的检测方法,大体方式都是这样:

var radio = document.getElementsByName("question");
for (i=0; i<radio.length; i++) {
if (radio[i].checked) {
alert(radio[i].value)
}
}
可是这只是针对一组单选问题的解决办法,当有多组单选问题的时候,就没法保证每一个问题都能被检测到已被选中。由于个人页面是这样的结构:
<div>
单选问题1:
<input type="radio" name="question1" value="1" />
<input type="radio" name="question1" value="2" />
<input type="radio" name="question1" value="3" />
<input type="radio" name="question1" value="4" />
</div>
<div>
多选问题N:
<input type="checkbox" name="questionN[]" value="1" />
<input type="checkbox" name="questionN[]" value="2" />
<input type="checkbox" name="questionN[]" value="3" />
<input type="checkbox" name="questionN[]" value="4" />
</div>
因此,网上搜索的方法貌似都不能解决个人具体问题,经过本身思考,最初相处了一个简单的方法,大概思路是这样的:
首先检测页面有多少组问题(假设总数为 N),而后经过用户每次click事件,给某个变量(假设为 M)累加1,固然,这个click只能累加第一次点击,第二次点击就再也不累加了,jquery有one函数解决哈。而后当用户提交的时候,对比 N 与 M 是否相等,若是不等,则表示没有完成。实现代码以下:
do_qid = 0;//记录作题次数
//经过点击具体试题的选项,记录作题次数
$('div.choice_body').one('click',function(){
do_qid++;
});html

$('form').on('submit',function(){
    var num = $('div.high_light').length;//总数
    if(num > do_qid){
        alert('你好像没作完,再去检查下吧!');
        return false;
    }else{
        return true;
    }

});
也许这个算是“耍小聪明”吧,但的确可以解决检测的困难,但若是用户并无经过鼠标点击选择问题的选项,而是经过键盘完成的,那么就会出现“明明作完了,网页仍然提示没完成”的错误判断。
虽然,这个只是个小瑕疵,临时用它来解决了个人项目问题。但我仍是但愿可以完全解决它。也许这个问题对于大牛来讲根本不是问题,但个人确花了一整晚来思考它,最后终于解决了,实现代码以下:
$('form').on('submit',function(){
    if(submit_check()){
        $('input[type="submit"]').addClass('disabled').val('正在提交,请等待...');
        return true;
    }else{
        alert('你好像没作完,再去检查下吧!');
        return false;
    }
});
function submit_check(){
    $.each($('.choice_body'),function(index,fn){
        var type = $(fn).find('input').attr('type');
        if(type == 'radio' || type == 'checkbox'){
            var input_val = $(fn).find('input:checked').val();
            if(input_val){
                console.log(index,input_val);
            }else{
                return false;
            }
        }
    });
    return true;
}

    _______________________________
    新手瞎折腾,大神见笑了~!欢迎指点更好的解决方法哦~!