【问题标题】:Limit/disable/enable checkbox限制/禁用/启用复选框
【发布时间】:2014-01-24 17:26:23
【问题描述】:

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

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

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

这是我的示例代码:

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提前谢谢..

【问题讨论】:

    标签: javascript jquery checkbox


    【解决方案1】:

    写:

    $("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.

    【讨论】:

      【解决方案2】:

      您不应设置复选框的选中属性并禁用按钮。

      给你:

      $(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/

      【讨论】:

      • 加载页面时。会有一个默认的 5 个选中复选框,对吗?但是当我尝试检查第 6 个复选框时,警报将触发并再次返回 5 个选中的复选框,但该按钮仍处于禁用状态。
      • 用户不应该选择不超过给定的mvp。程序应限制用户选中除 5 个复选框之外的其他框。
      【解决方案3】:

      试试这个,

      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

      【讨论】:

      • 谢谢@Rohan Kumar 这正是我想做的。除了超过时复选框不会被禁用
      • @user2593560 现在检查我的答案和更新的演示
      • 工作演示很好:D 更新的演示有错误。因为如果用户从加载中选中第 6 个复选框,其中默认选中了 5 个复选框,则第 6 个和第 7 个复选框将被禁用。但如果我取消选中 5 个默认复选框中的 1 个。第 6 和第 7 个复选框应再次打开以进行检查。
      • 是的,我认为您应该使用Working Demo,以防用户在选择5 checkboxes 后需要changecheckbox,那么他可以毫无限制地做到这一点。
      猜你喜欢
      • 1970-01-01
      • 2016-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-17
      • 1970-01-01
      • 1970-01-01
      • 2012-11-02
      相关资源
      最近更新 更多