限制/禁用/启用复选框

时间:2014-01-07 05:39:56

标签: javascript jquery checkbox

我对此链接有疑问:Limiting default checked checkboxes

我扩展了验证脚本的代码,这就是我想要做的。

  1. 我想要一个默认选中的复选框。
  2. 我想限制复选框的选择例如:如果mvp为3,我应该选择3并禁用其余的复选框,就像这样。 Limit Checkbox
  3. 如果未达到选择,我想禁用提交按钮,例如,如果给定的最大数量为5.如果未选中该选项,则不会启用提交按钮。
  4. 这是我的示例代码:

    var mvp = 5;
    
    $(document).ready(function() {
    
    
        $("input:checkbox").each(function( index ) {
            this.checked = ( index < mvp );
        });
    
    $("input:checkbox").click(function() {
    
      var bol = $("input:checkbox:checked").length != mvp;
    
      if(bol){
      alert("You have to choose "+ mvp +" mvp's only");
      this.checked = false;
      $("#button-cart").attr("disabled", true);
      }
      else{
      $("input:checkbox").not(":checked").attr("disabled",bol);
      $("#button-cart").attr("disabled", false);
      }
    });
    
    });
    

    这是小提琴:fiddle

    根据示例,我将mvp的值设置为5.当页面加载时,选中默认5复选框。然后,如果您取消选中1,则警报将触发它表示您应该有5个mvp,然后按钮将禁用。再次选中复选框后,将出现该按钮。但是有2个左边的复选框,用户可以选择。但如果用户超过5个选项,则警报将再次触发并将其返回到5个选中的复选框。这里的问题是按钮将保持禁用状态。

    你能帮我做一下这样的逻辑:D提前谢谢..

3 个答案:

答案 0 :(得分:4)

试试这个,

var mvp = 5;
$(document).ready(function () {
    $("input:checkbox").each(function (index) {
        this.checked = (index < mvp);
    }).click(function () {
       en_dis= $("input:checkbox:checked").length < mvp
       $('#button-id').prop('disabled', en_dis);
       // to disable other checkboxes
       $('input:checkbox:checked').length >= mvp &&
           $("input:checkbox:not(:checked)").prop('disabled',true);
    }).change(function () {
       if ($(this).siblings(':checked').length >= mvp) {
           this.checked = false;
       }
    });
});

Working DemoUpdated Demo

答案 1 :(得分:1)

您不应设置复选框的checked属性,也禁用该按钮。

你走了:

$(function () {
    var $button = $('#button-id'),
        mvp     = 5;

    $("input:checkbox").each(function (index) {
        this.checked = (index < mvp);
    }).on("click", function () {
        if ($("input:checkbox:checked").length != mvp) {
            alert("You have to choose " + mvp + " mvp's only");
            $button.prop("disabled", true);
        } else {
            $("input:checkbox").not(":checked").prop("disabled", false);
            $button.prop("disabled", false);
        }
    });
});

工作演示:http://jsfiddle.net/R79cM/

答案 2 :(得分:0)

写:

$("input:checkbox").each(function (index) {
    this.checked = (index < mvp);
});
$("#button-id").attr("disabled", true);
disable();
$("input:checkbox").change(function () {
    var bol = $("input:checkbox:checked").length != mvp;
    if (bol) {
        alert("You have to choose " + mvp + " mvp's only");            
        $("#button-id").attr("disabled", true);
        enable();
    } else {
        $("input:checkbox").not(":checked").attr("disabled", bol);
        $("#button-id").attr("disabled", false);
        disable();
    }        
});
function enable(){
    $("input:checkbox").not(":checked").each(function(){
        $(this).removeAttr("disabled");
    });
}
function disable(){
    $("input:checkbox").not(":checked").each(function(){
        $(this).attr("disabled","disabled");
    });
}

Updated fiddle here.