JQuery - 允许选择特定的2个复选框

时间:2018-02-23 15:47:57

标签: javascript jquery html html5 forms

我只想要选中1个复选框 - 除了它的复选框3和4 - 然后我想允许选中这两个复选框。这是我唯一允许2个复选框的时间。

我有一个只允许1个复选框的工作示例。看到j​​sfiddle ...... https://jsfiddle.net/rbla/s1setkfe/3/

我需要允许选择#3和#4

$(function() {

  $('#submit').click(function() {
    checked = $("input[type=checkbox]:checked").length;

    if (!checked) {
      alert("You must check at least one reason.");
      return false;
    }
  });
});


// No more than 1 checkbox allowed
var limit = 1;
$('input.sing-chbx').on('change', function(evt) {

  if ($("input[name='choice[]']:checked").length > limit) {
    this.checked = false;
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="" name="formname" method="post" autocomplete="off" id="update">
  <div class="group" style="margin:0.5em 0;">
    <div>
      <div id="one">
        <input type="checkbox" class="sing-chbx" id="choice" name="choice[]" value="01">
        <label>One</label><br/>
      </div>
      <div id="two">
        <input type="checkbox" class="sing-chbx" name="choice[]" value="02">
        <label>Two</label><br/>
      </div>
      <div id="three">
        <input type="checkbox" class="sing-chbx" name="choice[]" value="03">
        <label>Three</label><br/>
      </div>
      <div id="four">
        <input type="checkbox" class="sing-chbx" name="choice[]" value="04">
        <label>Four</label><br/>
      </div>
      <div id="five">
        <input type="checkbox" class="sing-chbx" name="choice[]" value="05">
        <label>Five</label><br/>
      </div>
    </div>
  </div>
  <input type="submit" id="submit" value="Confirm Submission">
</form>

2 个答案:

答案 0 :(得分:1)

我为您展示了我的解决方案fiddle

通过实际禁用其他复选框,我改变了处理此问题的方式,使用户更加直观地了解所发生的事情。

我为所有复选框添加了新类,只允许一个选择,并在允许两个选项的复选框中添加了一个单独的类。

之后,您只需要检查所点击的复选框的类别,并根据它是select-one还是select-two复选框来停用其他复选框:

var canOnlySelectOne = $(this).hasClass("select-one");

if (canOnlySelectOne) {
    $(".sing-chbx").not(this).attr("disabled", this.checked);
} else if ($(this).hasClass("select-two")) {
    if ($(".select-two:checked").length > 0) {
       $(".select-one").attr("disabled", true);
} else {
 $(".select-one").attr("disabled", this.checked);
}
}

我们只是根据是否选中点击的(this)来启用/禁用其他复选框。如果该复选框的类别为select-two,那么我们会检查是否已检查任何select-two复选框,并采取相应措施。

答案 1 :(得分:0)

  1. 而不是阻止用户检查 - 只需取消选中上游选择
  2. 您有3个案例:点击03,点击04,点击其他内容
  3. 以下是更新后的代码:

    &#13;
    &#13;
    $(function() {
    
      $('#submit').click(function() {
        checked = $("input[type=checkbox]:checked").length;
    
        if (!checked) {
          alert("You must check at least one reason.");
          return false;
        }
      });
    });
    
    
    // No more than 1 checkbox allowed except 3 & 4
    $('input.sing-chbx').on('change', function(evt) {
       var me = $(this).val(); 
     $('input.sing-chbx').each(function(ix){
       var el = $(this);
       if(el.val()!= me) {
          if(me == "03") {
       		   // case 1: me == '03' - disable all but '04'
             if( el.val() != "04") {
    	            el.prop('checked', false);
             }
          } else if(me == "04") { 
          	// case 2: me == '04' - disable all but '03'
            if(el.val() != "03") {
            	el.prop('checked', false);
            }
          } else {
          	// otherwise disable all
            el.prop('checked', false);
          }
       }
       });
    });
    &#13;
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <form action="" name="formname" method="post" autocomplete="off" id="update">
      <div class="group" style="margin:0.5em 0;">
        <div>
          <div id="one">
            <input type="checkbox" class="sing-chbx" id="choice" name="choice[]" value="01">
            <label>One</label><br/>
          </div>
          <div id="two">
            <input type="checkbox" class="sing-chbx" name="choice[]" value="02">
            <label>Two</label><br/>
          </div>
          <div id="three">
            <input type="checkbox" class="sing-chbx" name="choice[]" value="03">
            <label>Three</label><br/>
          </div>
          <div id="four">
            <input type="checkbox" class="sing-chbx" name="choice[]" value="04">
            <label>Four</label><br/>
          </div>
          <div id="five">
            <input type="checkbox" class="sing-chbx" name="choice[]" value="05">
            <label>Five</label><br/>
          </div>
        </div>
      </div>
      <input type="submit" id="submit" value="Confirm Submission">
    </form>
    &#13;
    &#13;
    &#13;