【问题标题】:How to make a checkbox unchecked based on another checkbox selection?如何根据另一个复选框选择取消选中复选框?
【发布时间】:2019-01-03 18:44:37
【问题描述】:

我的应用程序中有 6 个复选框。

<input type="checkbox" name="vehicle" id="vehicle1" value="one">one<br>
<input type="checkbox" name="vehicle" id="vehicle2" value="two">two<br>
<input type="checkbox" name="vehicle" id="vehicle3 value="three">three<br>
<input type="checkbox" name="vehicle" id="vehicle4" value="four">four<br>
<input type="checkbox" name="vehicle" id="vehicle5" value="five">five<br>
<input type="checkbox" name="vehicle" id="all" value="all">all<br>

我有这个 jquery 函数,如果单击“全部”复选框,它将禁用所有其他复选框。

$("#all").change(function(){
    var $inputs = $('input:checkbox')

    if($(this).is(':checked')){
           $inputs.not(this).prop('disabled',true);
    } else {
       $inputs.prop('disabled',false);
    }
});

如果我选择“全部”复选框以外的复选框,我会使用以下代码禁用“全部”复选框。

$("[type=checkbox]").click(function() {
    if((this.value == "one") || (this.value == "two") || (this.value == "three") || (this.value == "four") || (this.value == "five")){
        $( "#all" ).prop( 'disabled', true );
    }
    else{
        $( "#all" ).prop( 'disabled', false );
    }
});

我的问题是,如果我在选择一个复选框后尝试取消选中它,这个“全部”复选框仍然被禁用。我希望在取消选中任何复选框后启用它。各位大神能帮帮我吗?

【问题讨论】:

  • id="vehicle3 之后缺少"

标签: javascript jquery html checkbox checked


【解决方案1】:

如果选中,您需要验证是否有任何复选框,因此禁用 all 复选框否则 enable 它。

因此您可以使用$(":checkbox:not(#all)") 选择器将事件附加到与#all 不同的复选框,例如:

那么对于条件,您必须验证所有chekcbox,而不仅仅是点击的当前$(":checkbox:not('#all'):checked").length &gt; 0

$("#all").change(function() {
  var $inputs = $('input:checkbox');

  if ($(this).is(':checked')) {
    $inputs.not(this).prop('disabled', true);
  } else {
    $inputs.prop('disabled', false);
  }
});

$(":checkbox:not(#all)").click(function() {
  if ($(":checkbox:not('#all'):checked").length > 0) {
    $("#all").prop('disabled', true);
  } else {
    $("#all").prop('disabled', false);
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type="checkbox" name="vehicle" id="vehicle1" value="one">one<br>
<input type="checkbox" name="vehicle" id="vehicle2" value="two">two<br>
<input type="checkbox" name="vehicle" id="vehicle3" value="three">three<br>
<input type="checkbox" name="vehicle" id="vehicle4" value="four">four<br>
<input type="checkbox" name="vehicle" id="vehicle5" value="five">five<br>
<input type="checkbox" name="vehicle" id="all" value="all">all<br>

缩短版 sn-p:

$(":checkbox").click(function() {
  if ($(this).is("#all")) {
    $(":checkbox:not('#all')").prop('disabled', $(this).is(':checked'));
  } else {
    $("#all").prop('disabled', $(":checkbox:not('#all'):checked").length);
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type="checkbox" name="vehicle" id="vehicle1" value="one">one<br>
<input type="checkbox" name="vehicle" id="vehicle2" value="two">two<br>
<input type="checkbox" name="vehicle" id="vehicle3" value="three">three<br>
<input type="checkbox" name="vehicle" id="vehicle4" value="four">four<br>
<input type="checkbox" name="vehicle" id="vehicle5" value="five">five<br>
<input type="checkbox" name="vehicle" id="all" value="all">all<br>

【讨论】:

  • 不客气,兄弟...不知道你为什么选择使用重型版本而不是简单版本 :D ?你有这个选择的理由吗?!!
【解决方案2】:

没有 jQuery,在带有事件委托的纯 DOM 中。

var $$ = s => Array.from(document.querySelectorAll(s))
var $ = s => document.querySelector(s)

// listen to input event
document.body.addEventListener('input', function(e) {
  var target = e.target;
  var all;
  // when input event
  switch (true) {
    // if all, then disable other inputs
    case target.matches('input[name="vehicle"][value="all"]'):
      $$('input[name="vehicle"]:not([value="all"])')
        .forEach(
          element => element.disabled = target.checked)
      return false
    case target.matches("input[name='vehicle']:not([value='all'])"):
      $('input[name="vehicle"][value="all"]').disabled =
        $('input[name="vehicle"]:checked');
      return false;
  }
})
<input type="checkbox" name="vehicle" id="vehicle1" value="one">one<br>
<input type="checkbox" name="vehicle" id="vehicle2" value="two">two<br>
<input type="checkbox" name="vehicle" id="vehicle3" value="three" />three<br>
<input type="checkbox" name="vehicle" id="vehicle4" value="four ">four<br>
<input type="checkbox" name="vehicle" id="vehicle5" value="five " />five<br>
<input type="checkbox" name="vehicle" id="all" value="all" />all<br>

【讨论】:

    【解决方案3】:

    循环您的输入框,如果所有框都未选中,请启用 all 复选框。

    为此,我添加了一个检查器功能,它检查是否所有框都未选中。如果都未选中,则启用最后一个复选框。

    $("#all").change(function(){
           var $inputs = $('input:checkbox')
            if($(this).is(':checked')){
               $inputs.not(this).prop('disabled',true);
            }
           else{
               $inputs.prop('disabled',false);
            }
       });
    
      $("[type=checkbox]").click(function() {
        if((this.value == "one") || (this.value == "two") || (this.value == "three") || (this.value == "four") || (this.value == "five")){
         $( "#all" ).prop( 'disabled', true );
        }
        else{
          $( "#all" ).prop( 'disabled', false );
        }
        checker()
      });
    
    
      function checker(){
        var flag=0;
        $('input[type=checkbox]').each(function () {
          if(this.checked && $(this).val()!='all'){
             console.log($(this).val())
             flag=1;
          }
        });
        if(flag==0){
         $( "#all" ).prop( 'disabled', false );
        }
     }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.1/jquery.min.js"></script>
    <input type="checkbox" name="vehicle" id="vehicle1" value="one">one<br>
       <input type="checkbox" name="vehicle" id="vehicle2" value="two">two<br>
       <input type="checkbox" name="vehicle" id="vehicle3" value="three">three<br>
       <input type="checkbox" name="vehicle" id="vehicle4" value="four">four<br>
       <input type="checkbox" name="vehicle" id="vehicle5" value="five">five<br>
       <input type="checkbox" name="vehicle" id="all" value="all">all<br>

    【讨论】:

      猜你喜欢
      • 2015-05-08
      • 1970-01-01
      • 2020-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-15
      • 2021-12-23
      相关资源
      最近更新 更多