要检查允许复选框的数量限制[复制](Limit number of checkboxes allow

2019-07-18 13:34发布

可能重复:
计数复选框无需重新加载页面选择的号码?

我有要求,他们希望这类型的通行证(1-3天)的用户,并让他们选择他们想要的通行证的日子里选择一个订单。

目前,当他们选择3天,我的JQuery选择所有3个复选框他们,当他们选择1或2天(S)取消选择。 然而,我想要做的是:

当他们选择2天的通行证,只允许他们检查最多2盒。 当他们选择1天的通行证,只允许他们检查1盒。

我画一个空白,什么需要我去validateDays()函数-最好的方式去运行此验证或是否这实际上是采取的最佳路线。

我想使用的每一个方法需要的复选框具有相同的名称/ ID - 但由于形式的其他部分(略),他们可惜不能。

任何想法/指针?

头部分的JavaScript:

<script type="text/javascript">

function validateDays() {
    $('#matthewpeckham').find('input[type="checkbox"]').click(function () {
        var pass = parseInt($('input[name="other_1"]:checked').val(), 10) //1,2,3
        var days = $('#matthewpeckham').find('input[type="checkbox"]:checked').length;
        console.log(days, pass);
        if (days == pass) {
            $('#matthewpeckham').find('input[type="checkbox"]').not(':checked').prop('disabled', true);
        }
        else {
            $('#matthewpeckham').find('input[type="checkbox"]').not(':checked').prop('disabled', false);
        }
    })
    $('input[name="other_1"]').change(function () {
        $('#matthewpeckham').find('input[type="checkbox"]').prop({
            'checked': false,
            'disabled': false
        });
        if (parseInt($(this).val(), 10) == 3) $('#matthewpeckham').find('input[type="checkbox"]').prop({
            'checked': true,
            'disabled': false
        });
    });
}

</script>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" ></script>

<script type="text/javascript">
$(document).ready(function() {
    jQuery('#3daypass').click(function() {
        jQuery('#other_2 , #other_3 , #other_4').prop('checked', true);
    });
    jQuery('#2daypass , #1daypass').click(function() {
        jQuery('#other_2 , #other_3 , #other_4').prop('checked', false);
    });
});

</script>

主体部分HTML:

<input name="other_1" type="radio" value="3daypass" id="3daypass" onClick="validateDays();">
<input name="other_1" type="radio" value="2daypass" id="2daypass" onClick="validateDays();">
<input name="other_1" type="radio" value="1daypass" id="1daypass" onClick="validateDays();">

<input name="other_2" type="checkbox" id="other_2" value="Tues 5 Feb">
<input name="other_3" type="checkbox" id="other_3" value="Wed 6 Feb">
<input name="other_4" type="checkbox" id="other_4" value="Thurs 7 Feb">

Answer 1:

这里是一个jQuery的解决方案: 的jsfiddle例子

$('input[type="checkbox"]').click(function () {
    var pass = parseInt($('input[name="other_1"]:checked').val(), 10) //1,2,3
    var days = $('input[type="checkbox"]:checked').length;
    console.log(days, pass);
    if (days == pass) {
        $('input[type="checkbox"]').not(':checked').prop('disabled', true);
    }
})
$('input[name="other_1"]').change(function () {
    $('input[type="checkbox"]').prop({
        'checked': false,
            'disabled': false
    });
    if (parseInt($(this).val(), 10) == 3) $('input[type="checkbox"]').prop({
        'checked': true,
            'disabled': false
    });
});


Answer 2:

你需要检查你的验证功能检查箱子的数量:

function validateDays() {
    var numBoxesChecked = $("input:checkbox:checked").length;

    if (document.getElementById("2daypass").checked && numBoxesChecked > 2) {
        // invalid
    }

    if (document.getElementById("1daypass").checked && numBoxesChecked > 1) {
        // invalid
    }
}

请记住,任何JavaScript验证可以被绕过,所以确保你的服务器上执行一些类型的验证也是如此。

还要注意您可能要改变numBoxesChecked如果有页面上的其他不相关的复选框,如将其限制在一个容器如选择

var numBoxesChecked = $('#someContainer').find("input:checkbox:checked").length;


Answer 3:

jQuery的暴露了一个复选框选择应该证明是有用的在这里。

validateDays然后函数可以做的东西沿着这些路线

var checkedBoxes = jQuery(":checkbox:checked");
var numChecked = checkedBoxes.length;
...
    else if (document.getElementById("2daypass").checked) {
        if (numChecked > 2) { /*do something*/ }
    }
    else if (document.getElementById("1daypass").checked) {
        if (numChecked > 1) { /*do something*/ }
    }
    else {
        // DO NOTHING
    }
...

但是,你可能有“恢复”框的问题。 你也许可以简单地做

jQuery(this).prop('checked', false)


Answer 4:

我不是这方面的任何方式的专家,但这里是我做我的网站是什么,你应该能够修改它以满足您的需求......只记得给你输入相同的类名。

<script type="text/javascript">
function Check() {
    var count = 0;
    var checkBoxes = document.getElementsByClassName('chkValidation');
    for (var index = 0; index < checkBoxes.length; index++) {
        if (checkBoxes[index].type == 'checkbox') {
            if (!checkBoxes[index].disabled) {
                count = checkBoxes[index].checked ? (count + 1) : count;
            }
        }
    }
    if (count > 3) {
        alert('Question two - please select a maximum of 3 sub questions to ask.');
        return false;
    }
    return true;
} 



Answer 5:

You could also do it dymanically, using a function like so:

$('.checkbox').on('click', function(e) {
  var num_checked = 0;

  $('.checkbox').each(function() {
    if ( $(this).prop('checked') ) num_checked++;
  });

  var max_checked = $('input[name="other_1"]:checked').val();

  if ( num_checked > max_checked ) {
    $(this).prop('checked', false);
  }
});

Assuming a few small modifications to your html:

<input name="other_1" type="radio" value="3" id="3daypass">
<input name="other_1" type="radio" value="2" id="2daypass">
<input name="other_1" type="radio" value="1" id="1daypass">

<input class="checkbox" name="other_2" type="checkbox" id="other_2" value="Tues 5 Feb">
<input class="checkbox" name="other_3" type="checkbox" id="other_3" value="Wed 6 Feb">
<input class="checkbox" name="other_4" type="checkbox" id="other_4" value="Thurs 7 Feb">

Demo: http://jsbin.com/osecep/1/

It's not perfect, and you'd probably want to clear the checkboxes when the number of days is changed, but that should set you on the right track.



文章来源: Limit number of checkboxes allowed to be checked [duplicate]