jquery限制复选框基于选择

时间:2015-04-09 14:53:26

标签: javascript jquery checkbox jquery-validate html-select

http://jsfiddle.net/oberlinx/sy24k2dq/

$("input[name=questionid\\[\\]]").change(function(){
    var max= document.getElementById("numqs").value; 
    if( $("input[name=questionid\\[\\]]:checked").length == max ){
        $("input[name=questionid\\[\\]]").attr('disabled', 'disabled');
        $("input[name=questionid\\[\\]]:checked").removeAttr('disabled');
    }else{
        $("input[name=questionid\\[\\]]").removeAttr('disabled');
    } 
 })

我的表单带有一组复选框,并希望确保选中的复选框数与提交的问题数相同。我有一个jquery验证工作,以阻止做太多的选择,但我无法找到任何代码示例,以确保我也确保最低限度。

我尝试了这段代码,但它无法正常工作。我已经做了很多谷歌搜索,并没有看到使用下拉列表来限制可以检查并需要最小金额的复选框数量的好例子。

jQuery.validator.setDefaults({
    debug: true,
    success: "valid"
});

$( "#insertsurvey" ).validate({
    rules: {
        checkbox\\[\\]: {
            required: true,
            minlength: document.getElementById("numqs").value
        }
    }
});

我似乎无法找到任何格式问题,但它不起作用 如果用户选择4个问题,则在提交表单之前必须检查4个问题。我尝试向验证器添加规则,但无法运行。任何指导都会表示赞赏

1 个答案:

答案 0 :(得分:1)

您可以将minlength参数设为动态:

$("#insertsurvey").validate({
    rules: {
        'questionid[]': {
            required: true,
            minlength: function() {
                return parseInt($('#numqs').val(), 10);
            }
        }
    },
    messages: { 
            "questionid[]": "Please select more questions."
    } 
});

请注意,您的规则中的输入元素名称不正确(checkbox[]而不是questionid[])。此外,您的代码中还有很多奇怪的东西。我想详细说明,但现在,请看一下这个重写的例子( jsFiddle ):

// we're using these a lot, and your page doesn't change, so keep references handy
var $numQs = $('#numqs');
var $questions = $('input[name="questionid[]"]');

jQuery.validator.setDefaults({
    debug: true,
    success: "valid"
});

$("#insertsurvey").validate({
    rules: {
        'questionid[]': {
            required: true,
            // use a function here, make sure to parse the value into a number
            minlength: function() {
                return parseInt($numQs.val(), 10);
            }
        }
    },
    messages: { 
            "questionid[]": "Please select more questions."
    } 
});

// re-use our reference to $questions
$questions.change(function () {
    // again, make sure you're using an actual number
    var max = parseInt($numQs.val(), 10);
    // You can even re-use it here, further filtering
    if ($questions.filter(':checked').length == max) {
        // use prop() instead of attr()
        $questions.prop('disabled', true);
        $questions.filter(':checked').prop('disabled', false);
    } else {
        $questions.prop('disabled', false);
    }
});

$("input[name=reset]").click(function () {
    $questions.prop('disabled', false);
});

$numQs.on("change", function () {
    $questions.prop('disabled', false);
    $questions.prop('checked', false);
});